多态(灵活且可扩充)
指的是同一种方法,对象的不同可能有不同的区别(游戏界面鼠标左键单机是射击,聊天界面是框选)
编译器类型 = 运行期类型;
编译期间:写代码时由于类型上升了父类类型,所以只能调用到父类中的定义成员
提升了代码的扩展性
代码中,调用子类的重写方法
子父类的时候,编译器类型就是父类,运行期类型就是子类
has-a:
eg:
男孩有一个手机
手机可以发信息
男孩可以发信息
Boys:
抽象类:
1.没有足够信息描绘一个对象
2.不能实例化对象,用abstract修饰:
public abstract class Boys{
public abstract void send();
}
3.一个类包含抽象方法,那么该类就必须定义成抽象类
适用条件:
子类有两种功能有部分差异时需要父类中存在抽象方法来解决(静态方法不可以声明在抽象类里,静态方法不可以被重写)
用多态:只用一个父类可以表示不同的子类对象
public class Person {
public static void anmialsEat(Animals animals){
animals.eat();
}
public static void main(String[] args) {
Animals cat=new Cat();
Animals dog=new Dog();
anmialsEat(cat);
anmialsEat(dog);
}
}
有多态存在只需要使用其中一个方法即可
变量不存在被子类覆盖,方法存在被覆盖
对成员变量的调用
final关键字:
1.类不饿能被定义为抽象类或接口,不可被继承
2.方法在子类里不可以重写
3.参数在方法中不可被修改
4.属性定义时就必须直接赋值或者在构造方法中赋值,并且后期都无法修改