多态
1.多态:Person p = new English();
创建一个子类对象,把它的引用赋值给父类的引用变量,用父类的引用变量调用子类重写的方法。
2.前提条件:1.继承 2.子类必须重写父类的方法 3.将子类对象赋值给父类的引用变量
3.多态的好处:1.减少方法的重载 2.符合开闭原则(对扩展开放,对修改关闭)
4.多态的应用场合:1.父类的引用做方法的形参(public boolean equals(Object obj)) 2.父类的引用做返回值
5.简单工厂模式:把对象的应用与创建分开,工厂是创建对象的,用户来应用。(23种设计模式里有工厂模式,没有简单工厂模式)
public static Person getPerson(String str)
1.static 静态方法,直接类名调用
2.Person 父类类型做返回值,返回的可以是任意的子类对象
3.str 形参,一般是字符串,接收用户的要求
6.父类的引用变量不能调用子类独有的方法,解决方法:向下转型
Person p = new Chinese();
Chinese ch = (Chinese)p;
ch.方法名();
1.强制转换后就可以调用子类特有的方法
2.向下转型的前提是向上转型
3.向下转型必须转成真实的子类类型(之前new的是什么,就转成什么)
4.避免转型错误而产生异常的方法:instanceof
System.out.println(p instanceof Chinese);
方法作用:Chinese是否与p类型相同或者是p的直接或间接父类
7.向上转型(子类→父类)
Person p = new Chinese(); 向上转型,自动转型
8.abstract关键字
English,Chiense,Japanese都属于Person类,但是Person类不需要直接实例化;而父类的有些方法子类必须重写。
抽象类
1.使用abstract修饰 2.抽象类不能实例化 3.抽象类的构造方法不能删掉,也不能私有化,因为子类创建的时候要使用 4.抽象类可以有0/1/多个抽象方法
抽象方法
1.使用abstract修饰 2.抽象方法只有声明,没有实现(没有{}) 3.public abstract void shout(){};不是抽象方法 4.子类必须实现父类的抽象方法,除非子类也是抽象类 5.抽象方法只能定义在抽象类中
abstract不能与哪些关键字同时使用
final private(子类不能重写私有的方法) static(使用类名来调用一个没有方法体的方法没有意义)
9.final关键字
作用
1.修饰变量,变量变为常量,不能修改值
2.修饰方法,方法不能被子类重写
3.修饰类,类不能被继承,final类中方法默认都不能被重写(即使没用final修饰方法)
如果不想让一个类在其他类中创建对象:私有化构造方法