1.java的方法重写:
子类根据需求对父类继承的方法进行重新编写
重写的时候,可以使用super来保留父类的方法(构造方法不能被重写)
关键字是:@Override
2.方法重写的要求:
在父子类中
方法名相同
列表参数要相同
返回值类型要和父类的方法匹配( <=)
访问修饰符不能严格于父类
抛出的异常不能大于父类
父类的静态不能重写为非静态,非静态不能重写为静态
子类可以覆盖重写父类静态,无法使用super
父类的私有方法不能被重写
3.方法重写和方法重载的比较
| 位置 | 方法名 | 参数表 | 返回值 | 访问修饰符 |
方法重写 | 子类 | 相同 | 相同 | 相同或子类 | 不能比父类更严格 |
方法重载 | 同类 | 相同 | 不同 | 无关 | 无关 |
4.Object类常用重写方法
toString() 返回对象的所有信息,按照字符串对象返回
equals() 比较两个对象是否为同一个
hasCode() 返回对象的哈希代码值
getclass() 返回对象所属的类信息,返回Class对象
5.多态:
父类类型接收子类对象//子类对象引用父类类型,重写是多态的基础
多态的主要方式:使用父类作为方法的形参,使用父类作为方法的返回值
6.代理模式,静态代理
为其他对象提供一种代理,以控制对这个对象的访问。
代理对象在客服端和目标对象之间起到中介作用,代理模式属于结构型设计模式。
public class Father {
//代理模式,静态代理
public Father getInstance(String chose) {
if (chose.equals("儿子")) {
return new A();
} else if(chose.equals("女儿")){
return new B();
}else {
return new Father();
}
}
public static void main(String[] args) {
Father f = new Father();
Father ff = f.getInstance("儿子");
System.out.println(ff);
}
}
class A extends Father{}
class B extends Father{}
通过Father类中的getInstance方法来代理创建儿子A类或者女儿B类,或者Father类
7.转型
1) 向上转型:
父类的引用指向子类对象,自动进行类型转换
例如: Pet pet = new Dog(); //Pet 父类,Dog 子类
<父类型> <引用变量名> = new <子类型>();
此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法,此时通过父类引用变量无法调用子类特有的方法
2) 向下转型:
将一个指向子类对象的父类引用赋给一个子类的引用,即:父类类型转换为子类类型。需强制类型转换
<子类型> <引用变量名> = (<子类型> )<父类型的引用变量>;
Dog dog=(Dog)pet; //将pet 转换为Dog类型
为了判断是否为真实子类类型,常常添加判断:instanceof