1.向上造型:当多种角色能干的事是一样的,可以将那多种角色造型到超类数组中,方便访问(实现代码复用)
- 超类型的引用指向派生类对象
- java规定能点出来什么看引用类型
超类型↓ 派生类↓
Animal o3=new Tiger();//向上造型 超类型的引用指向派生类对象
o3.只能点出Animal类中的 能点出来什么,看引用类型----这是规定
Person p1=new Teacher();
Person p2=new Doctor();
p1/p2.只能点出Person类中的,不能点出派生类中的
SeaObject o5=new Battleship();
SeaObject o6=new Mine(200,300);
o5/o6.只能点出SeaObject类中的
class Animal{}//动物类
class Tiger extends Animal{}//老虎类继承动物类
Animal o1=new Animal();//这句话怎么读?一个动物对象是动物类型的:动物是动物√
Tiger o2=new Tiger();//一个老虎对象是老虎类型的:老虎是老虎√
Animal o3=new Tiger();//一个老虎对象是动物类型的:老虎是动物√
Tiger o4=new Animal();//动物是老虎× 编译错误
2.方法的重写:重新写
- 发生在父子类中,方法名相同,参数列表相同
- 重写方法被调用时,看对象类型----Java规定
- 重写遵循两同两小一大原则:(了解),
- 两同:方法名相同,参数列表相同
- 两小:派生类方法的返回值类型小于或等于超类方法的,派生类方法抛出的异常小于或等于超类方法的
- void和基本类型时,必须相等
- 引用类型时,小于或等于 (超类大,派生小)
class Coo{
void show(){}
double test(){return 0.0;}
Student say(){return null;}//Student类型 方法名say 因为需要返回值所以return null;
Person sayHi(){return null;}
}
class Doo extends Coo{
//int show(){return 5;}//编译错误,void时必须相等
//int test(){return 0;}//编译错误,基本类型时必须相等
//Person say(){return null;}//编译错误,引用类型时必须小于或等于
//Student sayHi(){return null;}//正确
}
- 一大:派生类方法的访问权限大于或等于超类方法的
class 餐馆{
void 做饭(){
做中餐
}
}
//我做中餐-------------不需要重写
class Aoo extends 餐馆{
}
//我想改做西餐---------需要重写
class Aoo extends 餐馆{
void 做饭(){做西餐}
}
//我想中餐加西餐(需要重写,先super中餐,再加入西餐)
class Aoo extends 餐馆{
void 做饭(){super.做饭();+做西餐}
}
class Aoo{
void show(){
}
}
class Boo extends Aoo{
void show(){
super.show();//调用超类的show方法
}
}
- 重写与重载的区别:面试题
- 重写(override):发生在父子类中,方法名相同,参数列表相同
- 重载(overload):发生在同一类中,方法名相同,参数列表不同
补充
- 向上造型:---实现代码的复用
- 当多种角色能干的事是一样的,可以将那多种角色造型到超类数组中,方便访问(实现代码复用)