面向对象ooDay4
精华笔记:[*]向上造型:--------------------------------------------代码复用
[*]超类型的引用指向派生类的对象
[*]能点出来什么,看引用的类型----------------这是规定,记住就OK
何时向上造型:
[*]多种角色能干的事都一样的时候,可以将多种角色统一造型到超类数组中,实现代码复用
eg: 学生/老师/医生都是输出名字+问好------干的事都一样,
就可以将学生/老师/医生统一造型到Person数组中,这样一个for即可-------代码复用
[*]方法的重写(override/overriding):重新写、覆盖
[*]发生在父子类中,方法名相同,参数列表相同
[*]重写方法被调用时,看对象的类型-----------------------这是规定,记住就OK
[*]重写需遵循"两同两小一大"原则:-------------------------了解,一般都是一模一样的
[*]两同:
[*]方法名相同
[*]参数列表相同
[*]两小:
[*]派生类方法的返回值类型小于或等于超类方法的
[*]void和基本类型时,必须相等
[*]引用类型时,小于或等于
[*]派生类方法抛出的异常小于或等于超类方法的------------------------API时讲
[*]一大:
[*]派生类方法的访问权限大于或等于超类方法的------------------------明天讲
[*]重写与重载的区别:----------常见面试题
[*]重写:发生在父子类中,方法名相同,参数列表相同
[*]重载:发生在同一类中,方法名相同,参数列表不同
笔记:
[*]向上造型:--------------------------------------------代码复用
[*]超类型的引用指向派生类的对象
[*]能点出来什么,看引用的类型----------------这是规定,记住就OK
何时向上造型:
[*]多种角色能干的事都一样的时候,可以将多种角色统一造型到超类数组中,实现代码复用
eg: 学生/老师/医生都是输出名字+问好------干的事都一样,
就可以将学生/老师/医生统一造型到Person数组中,这样一个for即可-------代码复用
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(){
}
}
[*]方法的重写(override/overriding):重新写、覆盖
[*]发生在父子类中,方法名相同,参数列表相同
[*]重写方法被调用时,看对象的类型-----------------------这是规定,记住就OK
class 餐馆{
void 做餐(){ 做中餐 }
}
//1)我还是想做中餐-----------------不需要重写
class Aoo extends 餐馆{
}
//2)我想改做西餐-------------------需要重写
class Aoo extends 餐馆{
void 做餐(){ 做西餐 }
}
//3)我想在中餐基础之上加入西餐--------需要重写(先super中餐,再加入西餐)
class Aoo extends 餐馆{
void 做餐(){
super.做餐();
做西餐
}
}
[*]重写需遵循"两同两小一大"原则:-------------------------了解,一般都是一模一样的
[*]两同:
[*]方法名相同
[*]参数列表相同
[*]两小:
[*]派生类方法的返回值类型小于或等于超类方法的
[*]void和基本类型时,必须相等
[*]引用类型时,小于或等于
//超类大,派生类小---------爸爸大,儿子小
class Coo{
void show(){}
double test(){ return 0.0; }
Student say(){ return null; }
Person sayHi(){ return null; }
}
class Doo extends Coo{
//int show(){ return 1; } //编译错误,void时必须相等
//int test(){ return 0; } //编译错误,基本类型时必须相等
//Person say(){ return null; } //编译错误,引用类型时必须小于或等于
Student sayHi(){ return null; } //正确,Student小于Person
}
[*]派生类方法抛出的异常小于或等于超类方法的------------------------API时讲
[*]一大:
[*]派生类方法的访问权限大于或等于超类方法的------------------------明天讲
[*]重写与重载的区别:----------常见面试题
[*]重写:发生在父子类中,方法名相同,参数列表相同
[*]重载:发生在同一类中,方法名相同,参数列表不同
补充:
[*]继承要符合is(是)的关系
[*]超类的意义:
[*]封装共有的属性和行为----------------------实现代码复用
[*]为所有派生类提供了统一的类型----------向上造型(实现代码复用)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]