黑马程序员---Java基础---多态
2015-12-10 16:22
501 查看
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
一、多态概述:
某一个事物,在不同时刻表现出来的不同状态。
二、多态前提
a:要有继承关系。
b:要有方法重写。 其实没有也是可以的,但是如果没有这个就没有意义。
c:要有父类引用指向子类对象。 父 f = new 子();
三、多态中的成员访问特点
A:多态中的成员访问特点
a:成员变量
编译看左边,运行看左边。
b:构造方法
创建子类对象的时候,会访问父类的构造方法,对父类的数据进行初始化。
c:成员方法
编译看左边,运行看右边。
d:静态方法(静态和类相关,算不上重写,所以,访问还是左边的)
编译看左边,运行看左边。
四、多态的好处和弊端
A:多态的好处
a:提高了代码的维护性(继承保证)
b:提高了代码的扩展性(由多态保证)
B:通过多态的弊端
a:不能使用子类特有的功能
C:要想使用子类的特有功能就需要把父类引用强制转换成子类的引用,这就要用到向上转型和向下转型
Fu f = new Zi(); 向上转型,相当于小的数据类型往大的数据类型转换。
Zi z = (Zi)f; 乡下转型,前提是父类引用必须指向该子类对象。
五、抽象类的概述
抽象类:就是描述不清楚的类。
在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。
abstract关键字 表示抽象,可以修饰类又可以修饰方法。
抽象方法格式: public abstract 返回值类型 方法名();
六、抽象类的特点
a:抽象类和抽象方法必须用abstract关键字修饰
抽象类格式: abstract class 类名 {}
抽象方法格式: public abstract 返回值类型 方法名();
b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
c:抽象类中可以有构造方法,抽象类不能进行实例化,用于子类访问父类数据时的初始化
d:抽象类不能实例化但是可以按照多态的方式,由具体的子类实例化。
e:抽象类的子类
要么是抽象类,没有意义。
要么重写抽象类中的所有抽象方法的具体类
七、抽象类的成员特点
A:抽象类的成员特点
a:成员变量:既可以是变量,也可以是常量。
b:构造方法:有。用于子类访问父类数据的初始化。
c:成员方法:既可以是抽象的,也可以是非抽象的。
B:抽象类的成员方法特性:
a:抽象方法 强制要求子类做的事情。
b:非抽象方法 子类继承的事情。
八、abstract不能和哪些关键字共存?
private 冲突 被private修饰的不能继承
final 冲突 被final修饰的方法不能被重写
static 无意义 如果被static 修饰 该方法是静态的是随着类的加载而加载,是要被类调用,被abstract修饰的方法没有方法体,调用没意义。
一、多态概述:
某一个事物,在不同时刻表现出来的不同状态。
二、多态前提
a:要有继承关系。
b:要有方法重写。 其实没有也是可以的,但是如果没有这个就没有意义。
c:要有父类引用指向子类对象。 父 f = new 子();
三、多态中的成员访问特点
A:多态中的成员访问特点
a:成员变量
编译看左边,运行看左边。
b:构造方法
创建子类对象的时候,会访问父类的构造方法,对父类的数据进行初始化。
c:成员方法
编译看左边,运行看右边。
d:静态方法(静态和类相关,算不上重写,所以,访问还是左边的)
编译看左边,运行看左边。
package cn.hebei.sjz_多态; /* * 多态的联系 */ class Animal{ int age = 10; public void load(){ System.out.println("叫"); } public void eat(){ System.out.println("吃"); } public static void method(){ System.out.println("父类的静态方法"); } } class Cat extends Animal{ int age = 18; public void load(){ System.out.println("喵喵叫"); } public void ti(){ System.out.println("尥蹶子"); } public static void method(){ System.out.println("子类的静态方法"); } } public class Demo1 { public static void main(String[] args) { Animal a = new Cat(); System.out.println(a.age);//结果为10,成员变量:编译看左边,运行看左边。 a.load();//喵喵叫 成员方法:编译看左边,运行看右边, 运行的是子类中的load()方法。 a.eat();//吃 子类中没有重写eat()方法,继承父类中的。 //a.ti(); //错误,找不到符号。 这是子类特有的功能,在编译中没有在父类中找到,编译失败。 //调用静态方法,编译看左边,运行看左边,不是多态的体现 a.method(); } }
四、多态的好处和弊端
A:多态的好处
a:提高了代码的维护性(继承保证)
b:提高了代码的扩展性(由多态保证)
B:通过多态的弊端
a:不能使用子类特有的功能
C:要想使用子类的特有功能就需要把父类引用强制转换成子类的引用,这就要用到向上转型和向下转型
Fu f = new Zi(); 向上转型,相当于小的数据类型往大的数据类型转换。
Zi z = (Zi)f; 乡下转型,前提是父类引用必须指向该子类对象。
package cn.hebei.sjz_多态; /* * 向下转型和向上转型 */ class F{ int age = 50; String name = "父亲"; public void house(){ System.out.println("三间房"); } } class Z extends F{ int age = 25; String name = "儿子"; public void house(){ System.out.println("一间房"); } public void netManager(){ System.out.println("工人"); } } class Nv extends Fu{ int age = 23; String name = "女儿"; public void house(){ System.out.println("一间房"); } public void work(){ System.out.println("财务"); } } class Demo2 { public static void main(String[] args) { F f = new Z();//向上转型 System.out.println(f.age);//50 成员变量:编译看左边,运行看左边 System.out.println(f.name);//父亲 f.house();//一间房 成员方法:编译看左边,运行看右边 Z z = (Z)f;//向下转型 z.netManager(); } }
五、抽象类的概述
抽象类:就是描述不清楚的类。
在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。
abstract关键字 表示抽象,可以修饰类又可以修饰方法。
抽象方法格式: public abstract 返回值类型 方法名();
六、抽象类的特点
a:抽象类和抽象方法必须用abstract关键字修饰
抽象类格式: abstract class 类名 {}
抽象方法格式: public abstract 返回值类型 方法名();
b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
c:抽象类中可以有构造方法,抽象类不能进行实例化,用于子类访问父类数据时的初始化
d:抽象类不能实例化但是可以按照多态的方式,由具体的子类实例化。
e:抽象类的子类
要么是抽象类,没有意义。
要么重写抽象类中的所有抽象方法的具体类
七、抽象类的成员特点
A:抽象类的成员特点
a:成员变量:既可以是变量,也可以是常量。
b:构造方法:有。用于子类访问父类数据的初始化。
c:成员方法:既可以是抽象的,也可以是非抽象的。
package cn.hebei.sjz_多态; /* * 抽象类的练习 */ abstract class An { public An() { } public abstract void eat();//抽象方法 a51e public void show() { System.out.println("我是父类的非抽象方法");//非抽象方法 } } class Ca extends An { public void eat() { System.out.println("猫爱吃鱼"); } } public class Demo3 { public static void main(String[] args) { An a = new Ca(); a.eat(); } }
B:抽象类的成员方法特性:
a:抽象方法 强制要求子类做的事情。
b:非抽象方法 子类继承的事情。
八、abstract不能和哪些关键字共存?
private 冲突 被private修饰的不能继承
final 冲突 被final修饰的方法不能被重写
static 无意义 如果被static 修饰 该方法是静态的是随着类的加载而加载,是要被类调用,被abstract修饰的方法没有方法体,调用没意义。
相关文章推荐
- 黑马程序员————————反射
- 黑马程序员————————多线程(模拟动车售票案例)
- 黑马程序员————————创建多线程的两种方式
- 面试
- 115个Java面试题和答案——终极列表(下)
- 115个Java面试题和答案——终极列表(上)
- BAT安卓工程师面试流程解析+还原最真实最完整的一线公司面试题
- POPTEST学员就业面试题目!!!!!
- 黑马程序员————————正则表达式常用方法
- 黑马程序员————————IO流(图片加密)
- 我也当面试官了。。
- 面试题集
- 程序员业余项目死亡的原因
- 史上最全面的程序猿招聘建议
- PHP程序员都应该知道的 16个最佳 PHP 库
- 35岁程序员的独家面试经历
- 最容易惹程序员生气的十件事
- Android面试经验2
- 黑马程序员——————文件IO
- 黑马程序员—java基础复习—集合