笔记
1.向上造型的意义:-------实现代码复用
- 超类型的引用指向派生类的对象
- 能点出来什么,看引用的类型----------规定
超类型 派生类型
Animal o3 = nem Tiger();//向上造型
Person p1 = new Student();
Person p1 = new Teacher();
Person p1 = new Doctor();
p1/p2/p3.只能点出Person类中的
public class UploadDemo {
public static void main(String[] args) {
Aoo o1 = new Aoo();
o1.a = 1;
o1.show();
//o1.b = 2; //编译错误
//o1.test(); //编译错误,超类不能访问派生类的
Boo o2 = new Boo();
o2.b = 1;
o2.test();
o2.a = 2; //正确
o2.show(); //正确,派生类可以访问超类的
Aoo o3 = new Boo(); //向上造型
o3.a = 1;
o3.show();
//o3.b = 2; //编译错误
//o3.test(); //编译错误,能点出来什么,看引用的类型
}
}
class Aoo{
int a;
void show(){
}
}
class Boo extends Aoo{
int b;
void test(){
}
}
2.方法的重写(Override或Overriding):重新写
- 发生在父子类中,方法名相同,参数列表相同
- 重写方法被调用时,看对象的类型-------规定
- 重写遵循“两同两小一大”原则:--------
- 两同:
- 方法名相同
- 参数列表相同
- 两小:
- 派生类方法的返回值类型小于或等于超类方法的
- void 和基本类型时,必须相等
- 引用数据类型时,小于或等于
- 派生类方法抛出的异常小于或等于超类方法的—API
- 派生类方法的返回值类型小于或等于超类方法的
- 一大:
- 派生类方法的访问权限大于或等于超类方法的
- 两同:
public class OverrideDemo {
}
//超类大,派生类小
class Coo{
void show(){ }
double test(){ return 0.0;}
Student say(){return null;}
}
class Doo extends Coo{
//int show(){return 5;} //编译错误,void时必须相等
//int test(){ return 0;} //编译错误,基本类型时必须相等
//Person say(){return null} //编译错误,引用类型时必须小于或等于
Student say(){return null;}
}
class 餐厅{
viod 做餐(){做中餐}
}
//我还是想要做中餐--------不需要重写
class Aoo extends 餐馆{
}
//我想改做西餐------------需要重写
class Aoo extends 餐馆{
void 做餐(){做西餐}}
//我想在中餐之上加入西餐-----需要重写(先super中餐,再加入西餐)
class Aoo extends 餐馆{
void 做餐(){
super.做餐();+ 做西餐}}
3.重写与重载的区别:
-重写(override):发生在父子类中,方法名相同,参数列表相同
-重载(overload):发生在统一类中,方法名相同,参数列表不同
补充:
1.何时向上造型:------代码复用
- 当多种角色能干的事是一样的,可以将那多种角色造型到超类数组中,统一访问