Java核心概念抽象类、接口、Object类深度剖析1.抽象类1.1啥是抽象类1.2抽象类的特性1.3如何使用抽象类呢1.4抽象类的作用2.接口2.1接口的声明2.2接口的使用2.3接口的特性2.4实现多个接口2.5接口间的继承3.Object类3.1初步了解Object类3.2获取对象信息1.抽象类1.1啥是抽象类在面向对象的概念中所有的对象都是通过类来描绘的但是反过来并不是所有的类都是用来描绘对象的如果一个类中没有足够的信息来描绘一个具体的对象这样的类就是抽象类。像这样的Animal类一般只为服务创建Dog类和Cat类的我们就可以直接定义为抽象类abstract class以及animal类的bark()方法我们通常不调用所以我们同样可以写为抽象方法abstract function。像这样子的抽象类和抽象方法就是为了让子类去重写再描述具体对象而产生的。并且我们同样合理的利用编译器的语法规则去校验我们的代码以防错误的创建和访问。1.2抽象类的特性注意1.抽象类不能直接实例化对象但其他功能和普通类仍然一样2.抽象类必须被继承3.抽象方法不能是private的4.抽象方法不能被final和static修饰因为抽象方法要被子类重写5.抽象类必须被继承并且继承后子类要重写父类中的抽象方法否则子类也是抽象类必须使用abstract修饰6.抽象类中不一定包含抽象方法但是有抽象方法的类一定是抽象类7.抽象类中可以有构造方法供子类创建对象时初始化父类的成员变量1.3如何使用抽象类呢我们依旧拿Animal举例哈问就是想象力匮乏…publicabstractclassAnimal{publicabstractvoidbark();}//是在不同文件哈publicclassDogextendsAnimal//记得要重写抽象方法哈publicvoidbark(){System.out.println(在汪汪汪);}}1.4抽象类的作用经过上面的学习我们可以知道抽象类就是为了给定子类一个大的框架保证后面的子类根据抽象类做更多定义。记住哈抽象类本身不能被实例化要想使用只能创建该抽象类的子类然后让子类重写抽象类中的抽象方法。另外呢我想说我们使用抽象类的意义就是为了多一重编译器的校验尽管普通类就足够但既然有这样的语法我们就应该按照规范去完成啦2.接口2.1接口的声明publicinterface[接口名称]{publicvoidmethod();}注意:1.创建接口时接口的命名一般以大写字母I开头2.接口的命名一般使用“形容词”词性的单词3.接口是隐式抽象的当声明一个接口的时候不必使用abstract关键字4.接口中的方法都是共有的2.2接口的使用接口必须要通过一个“实现类”来实现该接口并且要实现接口中的所有方法否则类必须声明为抽象的类。eg:(这是两个文件publicinterfaceIaction{voideat();voidwalk();voidsleep();...}publicclassDogimplementsIaction{Overridepublicvoideat(){}Overridepublicvoidwalk(){}Overridepublicvoidsleep(){}}1.子类与父类之间是extends继承关系类与接口之间是implements实现关系2.这两种关系可以同时作用3.继承不能多继承但一个类可以同时实现多个接口2.3接口的特性1.接口当中的成员变量默认是public static final修饰的只能是public用private会编译报错2.接口当中的抽象方法默认都是public abstract修饰的只能是噢、public abstract其他修饰符都会报错3.如果接口当中的方法被default修饰那么可以有具体的实现defaultvoidtest(){System.out.println(default method);4.如果接口当中的方法被static修饰那么可以有具体的实现staticvoidtest(){System.out.println(static method);5.接口是不可以进行实例化的6.类和接口之间可以使用关键字implements来实现接口7.一个接口对应一个字节码文件8.接口中不能有静态代码块和构造方法9.如果类中没有实现接口中的所有方法则类必须设置为抽象类2.4实现多个接口实现接口不像继承类一样它可以多个实现比如下面publicclassAnimalimplementsIwalk,Iswim,Ieat{}注意通常我们用抽象类或父类实现接口的时候所实现的接口一定要有共性如walkeat一些动物都会的…另外一个类实现多个接口时每个接口中的抽象方法都要实现否则类必须设置为抽象类。提示IDEA中使用 ctrl i 可以快速实现接口因此我们可以这样去理解继承表达的含义是is-a语义而接口表达的含义是具有xxx特性猫是一种动物具有会跑的特性青蛙也是一种动物既能跑也能游泳这样的话我们可以不用父类实现所有接口只需要每一个动物类去单独实现该有的特性然后在运行类这样写再在main方法中像这样去调用即可publicclassTest{publicstaticvoidwalk(IWalkiwalk){iwalk.walk();}publicstaticvoidmain(String[]args){DogdognewDog(PaPy Dog,3);Test.walk(dog);Test.walk(newDog(dog,2));//匿名对象同样也行}}但是如果该具体动物类没有实现对应接口那么就会报错2.5接口间的继承interfaceIA{publicvoidia();}interfaceIB{publicvoidib();}interfaceICextendsIA,IB{publicvoidic();}但我们去实现接口IC的时候要重写IC所继承的所有方法以及它本身的方法。即 要重写iaibic三个方法接口间的继承相当于把多个接口合并在一起3.Object类3.1初步了解Object类首先我们要知道Object类是Java默认提供的一个类Java里除了Object类所有的类都是存在继承关系的。默认继承Object父类。即所有类的对象都可以使用Object的引用进攻接收。eg:我们用Object接受所有类的对象classDog{}classCat{}publicclassTest{publicstaticvoidmain(String[]args){Objectobj1newDog(dog,2);Objectobj2newCat(cat,2);}}也就是说都可以向上转型所以在开发中Object类是参数的最高统一类型。但Object类也有定义好的一些方法。我们主要关注hashCode(),equal(),toString()这几个方法即可3.2获取对象信息打印对象信息我们可以直接重写或直接调用Object类的toString方法// Object类中的toString()方法实现publicStringtoString(){returngetClass().getName()Integer.toHexString(hashCode());}//重写的toStringOverridepublicStringtoString(){returnDog{namename\, ageage};}ObjectobjnewDog(dog,2);System.out.println(obj.toString());//这样调用即可以上是我关于Java的笔记分享感谢你读到这里这也是我学习路上的一个小小记录。希望以后回头看时能看到自己的成长~