Java学习笔记(八)——多态
来源:互联网 发布:百丽运动旗舰店 知乎 编辑:程序博客网 时间:2024/06/16 20:51
1.多态
概念:多态是一种能力,父类的类型引用可以指向子类的对象,并且在运行期根据对象的实际类型调用实际类型中的定义。条件:
- 存在继承
- 父类引用指向子类对象
- 子类重写父类的方法
实例:/** * 描述不同国家的人在餐厅吃饭 * 中国人、意大利人、美国人、日本人 * 餐厅: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:静态的成员方法是否可以实现多态?
不可以实现多态,静态方法是不能被重写的。
阅读全文
0 0
- Java学习笔记(八)——多态
- java学习笔记八——关键字
- 黑马程序员——JAVA学习笔记(八)
- java学习笔记(八)—— extends and override
- Oracle学习笔记(八)——java操作Oracle
- java学习笔记(八)
- Java学习笔记(八)
- Java学习笔记(八)
- Java学习笔记(八)
- java学习笔记(八)
- java学习笔记(八)
- Java学习笔记八
- Java学习笔记八——Java多线程初步
- 黑马程序员学习笔记八——java高新技术
- java多线程学习笔记(八) ——线程停止(interrupt)
- Effective Java学习笔记(八)
- java基础学习笔记(八) log4j
- Java Web学习笔记(八)hibernate
- 单调队列—使用介绍与原理
- Ubuntu 14.04 使用 Android 相机
- [题解]bzoj2142 礼物
- Banner无限轮播
- 浅谈打印流是真的自动刷新吗?
- Java学习笔记(八)——多态
- ZK Hadoop Hive 集群搭建
- (CodeForces
- 看不懂的微信小程序 正在布局移动电商之路
- Kafka剖析(一):Kafka背景及架构介绍
- 扩欧理解ex_gcd
- jQuery选择器(1)
- Android CheckBox让文字在选择框的左边
- [P1134]阶乘问题