Java学习笔记(八)——多态

来源:互联网 发布:百丽运动旗舰店 知乎 编辑:程序博客网 时间:2024/06/16 20:51

1.多态

概念:多态是一种能力,父类的类型引用可以指向子类的对象,并且在运行期根据对象的实际类型调用实际类型中的定义。
条件:
  1. 存在继承
  2. 父类引用指向子类对象
  3. 子类重写父类的方法
实例:
/** * 描述不同国家的人在餐厅吃饭 * 中国人、意大利人、美国人、日本人 * 餐厅:showEat(){ *  * } * 人 person 吃饭   *  * */public class TestPolymorphism2 {public static void main(String[] args) {Restaurant restaurant = new Restaurant();Chinese chinese = new Chinese();American american = new American();Japanese japanese = new Japanese();Italian italian = new Italian();restaurant.showEat(chinese);restaurant.showEat(american);restaurant.showEat(italian);restaurant.showEat(japanese);}}class Person{void eat(){System.out.println("回家吃饭");}}class Chinese extends Person{void eat(){System.out.println("中国人在吃饭。");}}class Japanese extends Person{void eat(){System.out.println("日本人在吃饭。");}}class American extends Person{void eat(){System.out.println("美国人在吃饭。");}}class Italian extends Person{void eat(){System.out.println("意大利人在吃饭。");}}class Restaurant{void showEat(Person person){person.eat();}}

多态转型:
Animal cat = new Cat();//自动向上类型转换,编译器帮助完成,因为安全的。cat.sound();//类型决定功能//必须显式的告诉编译器,Animal cat 是一只猫if(cat instanceof Cat){//这个判断不是必须的,Cat c = (Cat)cat;c.catchMouse();//强制向下类型转换,转换不一定是安全带,所以必须强制执行}//何时使用强制向下类型转换     //一个子类对象的类型是父类的类型,然后还想使用子类特有的方法,那么必须进行强制向下类型转换


2.程序的设计原则

开闭原则:对于功能的增加是开放的,对于现有代码的修改时关闭的。

3.抽象类

抽象方法:
如果一个父类中的方法的实现没有太大的意义,那么可以将该方法声明成 抽象的方法  。
抽象的方法没有方法体。 只有方法的声明部分。需要在参数列表的末尾添加一个分号。
如果一个类中有抽象方法,那么该类就不能被实例化。可以而且必须将含有抽象方法的类声明成抽象类。
在java 中被声明成抽象类的类,不能被实例化。 那么只能作为父类,被其他类继承。
如果设计类的设计人员,不希望一个类被其他的类实例化,那么也可以将类直接声明成抽象类。
抽象方法的语法:
abstarct void test();
抽象类:
含有抽象方法的类、不想被实例化的类。
语法:
abstarct class Animal{
}
特点:
1:抽象类不能被实例化
2:抽象类可以包含抽象方法,也可以不包含抽象方法,包含抽象方法的个数没有任何的限制[0-n]
3:抽象类只能被作为父类使用。
4:抽象类同样有构造方法。作用,初始化类的成员。
抽象类出现的意义:
对于一个不想被实例化的类,避免了被错误的实例化。
1:抽象类中一定有抽象的方法? 
不对,抽象类中可以没有抽象方法
2:有抽象方法的类,一定是抽象类?
3:抽象类是否可以用final 修饰?
不可以,final 和 abstarct 是互斥。 
4:静态方法是否可以声明成抽象方法?
静态方法:可以被继承,不能被重写的。
不可以:static 和 abstarct 是互斥的
5:抽象类中定义的抽象方法,每一个抽象的方法都是定义了一个规则!!
被子类覆盖   抽象的 sound 定义了一个规则(实现一个什么样功能的规则)
父类定义抽象方法,规定了方法实现的功能,至于子类如何实现这个规定的功能,父类就不干涉了。
6:类的实例成员变量是否可以实现多态?
不可以实现多态(多态是针对方法)
7:静态的成员方法是否可以实现多态?
不可以实现多态,静态方法是不能被重写的。

原创粉丝点击