instanceof
用于判断两个类是否存在父子关系
instanceof是Java中的二元运算符,左边是对象,右边是类;当对象是右边类或子类所创建(new)对象时,返回true;否则,返回false。
如果创建对象左右两边都与instanceof右边类有关系,直接编译不通过
类型转换
低转高会自动转换,高转低要强制转换
在继承关系中 父类代表高的 子类代表低的
例如:创建了一个student对,用person类型实例化,低转高,可以自动完成(但是可能会丢失本来自己的方法)。
Person person=new Student();
此时person可以使用Person类中的方法,不可以使用Student中的
可以强制转换,将person从Person高转到Student低就可以使用子类的方法
((Student)person).方法();
- 父类引用指向子类对象
- 子类向父类 ,向上自动转换
- 父类向子类,向下强制转换
- 方便方法调用,减少重复代码
Static关键字
Static修饰的变量,方法随着类一起加载,为类所共享
推荐使用类名访问静态变量(可以方便判断为静态变量),静态变量对于这个类而言只有一个,被类中所有实例共享。非静态变量引用必须先实例对象,对象.变量
没办法在主函数中直接调用非静态方法run,必须先实例对象,对象.方法。
静态方法可以直接调用或者类名.方法,而且非静态方法可以直接访问类中的静态方法,静态方法中可以调用静态的不能调用非静态的
就可以省略math.直接用方法名调用方法
final修饰的类不能继承
抽象类(不是重点)
abstract抽象类
修饰方法 public abstract void dosomething
抽象方法 没有方法实现只有方法名字
抽象类的子类,都必须实现他的所有方法,除非子类也是abstract的。
extends类只能单继承,就是一个类只能有一个父亲,但是接口可以多继承。
注意:
- 抽象类不能new出一个实例,只能由子类实现,相当于一个约束
- 抽象类中可以写普通方法,但是如果有抽象方法,必须是抽象类。
思考题:
抽象类不能new,那么有构造器吗?
抽象类作用:节省代码提高开发效率。