关键字abstract
其特点:
1、用abstract关键字修饰的函数时抽象函数
2、类内有抽象函数(或抽象方法)的类为抽象类,类必须要用abstract修饰
3、抽象类不能被实例化,也就是不能用来创建对象(new...)
4、抽象类的子类必须覆盖实现父类中的抽象函数。也就是说abstract的类需要子类来重写方法
5、抽象类可以有构造函数,当被继承的时候,子类会用super()调用父类的构造函数
注意:抽象(方法、变量)不能被final或private(这样就无法继承父类了)修饰;
抽象方法不能被static修饰,因为static修饰的方法可以直接调用类名来实例化,这当然是不可能的
package Training; abstract class fu{ public abstract void show(); public void method() { System.out.println("我是构造方法!"); } } class Zi extends fu{ //super(); public void show() { System.out.println("---------zi()-----------"); } } public class ABC { public static void main(String[] args) { Zi z = new Zi(); z.show();///抽象类通过子类来实现实例化 z.method(); } }
1 ---------zi()----------- 2 我是构造方法!View Code
关键字interface和implements
接口:如果一个抽象类里面的所有方法都是抽象方法,且没有声明变量,而且接口里面所有的成员都是 public 权限的 。
用法:接口使用关键字 interface 来定义,并使用关键字 implements 来实现接口中的方法,且必须完全实现。
接口使用规则:
1.类中全部为抽象方法。
2.抽象方法钱不用加abstract。
3.接口抽象方法属性为public。
4.成员属性必须为常量。
接口与继承的区别:继承(extends)是单一性的,只能单单继承一个父类,而接口使用关键字 implements 多个引用并用逗号分开(引用多个interface修饰的类)
接口各种用法:
1.普通类引用接口 class Zi implements Fu1,Fu2,.....{ ... } 2.抽象类应用接口 与1同理,但在class前加abstract 3.继承父类引用接口 class Zi extends Fu implements Fu1,Fu2,...{ ... } 4.接口与接口的继承 interface Fu1 extends Fu2{ ... } Fu1,Fu2都为接口
接口与抽象类的区别:
1.一个子类如果 implements 一个接口,就必须实现接口中的所有方法(不管是否需要);如果是继承一个抽象类,只需要实现需要的方法即可。
2.如果一个接口中定义的方法名改变了,那么所有实现此接口的子类需要同步更新方法名;而抽象类中如果方法名改变了,其子类对应的方法名将不受影响,只是变成了一个新的方法而已(相对老的方法实现)。
3.抽象类只能单继承,当一个子类需要实现的功能需要继承自多个父类时,就必须使用接口。
关键字instanceof
特点:
1、instanceof关键字是在Java类中实现equals方法最常使用的关键字,表示其左边的对象是否是右边类型的实例,这里右边的类型可以扩展到继承、实现结构中,可以是其真实类型,或者真实类型的超类型、超接口类型等。
2、instanceof左边必须是对象实例或者null类型,否则无法通过编译。
3、instanceof右边必须是左边对象的可转换类型(可强转),否则无法通过编译。
4、instanceof 是 Java 的一个二元操作符,类似于 ==,>,< 等操作符。
5、instanceof左边必须为引用类型,不能为基本数据类型(如int、double、。。。)。
package Training; class Fu{ } class Zi extends Fu{ } //接口类 interface A{ } interface B{ } class C extends Fu implements A,B{ } public class atect { public static void main(String [] args) { Fu f1 = new Fu(); Fu f2 = new Zi(); Zi z = new Zi(); System.out.println(f1 instanceof Zi);//false System.out.println(f2 instanceof Zi);//true System.out.println(z instanceof Zi);//true System.out.println(null instanceof Fu);//false System.out.println("------不疯狂就不优秀------"); C c = new C(); System.out.println(c instanceof A);///true A a = new C(); System.out.println(a instanceof C);//true } }
参考资料:https://blog.csdn.net/xnh_565175944/article/details/79896232
https://blog.csdn.net/weixin_40096176/article/details/79094991
https://www.jb51.net/article/116180.htm
https://blog.csdn.net/DYD850804/article/details/81097776
http://www.51ui.cn/66/4306186/