01_面向对象(多态的概述及其代码体现)
什么是多态:事物在不同时刻存在的不同状态
多态的前提:
1 要有继承关系
2 要有方法的重写(没有方法的重写也叫多态,只是没有意义)
3 要有父类引用指向子类对象 Fu f = new Zi();
------------------------------------------------------------------------------------------------------------------
02_面向对象(多态中的成员访问特点之成员变量)
多态中成员变量的访问特点是什么?
成员变量 编译看父类(编译时看父类有无调用的这个成员变量,没有的话报错),
运行看父类(调用后的结果是父类的)。
class Demo2_Polymorphic {
public static void main(String[] args) {
Father f = new Son(); //父类引用指向子类对象
System.out.println(f.num);
}
}
class Father {
int num = 10;
public void print() {
System.out.println("father");
}
}
class Son extends Father {
int num = 20;
public void print() {
System.out.println("son");
}
}
------------------------------------------------------------------------------------------------------------------
03_面向对象(多态中的成员访问特点之成员方法)
成员方法
编译看左边(编译时看父类有无调用的这个成员方法,没有的话报错),
运行看右边(调用后的结果是子类的)。
思考为什么多态中的成员符合以上两个特点呢?
因为成员变量不存在重写,而方法存在重写.
------------------------------------------------------------------------------------------------------------------
04_面向对象(多态中的成员访问特点之静态成员方法)
静态方法
编译看左边(父类),运行看左边(父类)。
(静态和类相关,算不上重写,所以,访问还是左边的)
------------------------------------------------------------------------------------------------------------------
05_面向对象(超人的故事)
这就是多态的使用
class fruit
{
}
class apple extends fruit
{
}
class A
{
public void basket(fruit f)\;
// public void basket(橘子 f){};
// public void basket(梨 f){};
}
比如你要做个篮子放水果,你当然不希望造这样的篮子--苹果篮子,橘子篮子,梨篮子,正常人都会想,麻烦啊,我就造个篮子,什么都能放,干嘛造那么多啊?
回归程序:你造个篮子 basket();参数是水果 fruit,这样你调用的时候就可以这样 basket(fruit f);然后往里放苹果啊,梨啊,什么都行,只要是水果类的子类
好处:这样设计你的程序,等你的参数变了的时候,只要还是水果,你就不用去改程序了,这就是可扩展性的体现
以后开发中接口多态是最为常见的.
--------------------------------------------------------------------------------------------------------
06_面向对象(多态中向上转型和向下转型)
注意:在转型时,只能把数据转成它原本的类型或者它的父类型.
两个毫无关系的类型是不能互相转换的(不存在继承或实现关系)
--------------------------------------------------------------------------------------------------------
07_面向对象(多态的好处和弊端)
多态的好处:提高代码的扩展性和可维护性。
多态的弊端:父类引用不能使用子类特有功能。
解决办法:通过子父类间的类型转换.
关键字 instanceof 判断前边的引用是否是后边的数据类型
--------------------------------------------------------------------------------------------------------
08_面向对象(多态中的题目分析题)
------------------------------------------------------------------------------------------------------------------
09_面向对象(抽象类的概述及其特点)
一 想要定义一个类为抽象类怎么表示:
abstract 定义抽象
这个关键字可以修饰类 ,可以修饰方法
抽象方法是没有方法体的
二 抽象类不能被实例化。那么,怎么实例化呢?
创建一个子类去继承抽象类,然后创建子类对象.
三 如果一个类继承抽象类,那么想要代码不出错怎么解决?
1 如果类不定义为抽象,那么必须重写抽象类中所有的抽象方法
2 如果定义的类也为抽象的话,就不需要重写方法.
------------------------------------------------------------------------------------------------------------------
10_面向对象(抽象类的成员特点)
一 抽象类的成员特点:
A:成员变量:可以有成员变量,也可以有成员常量。
B:构造方法:有构造方法。
C:成员方法:可以有抽象方法,也可以有非抽象方法。
(抽象方法是为了要求子类做某些事情。)
(非抽象方法是为了提高代码的复用性,被子类继承)
二 抽象类既然不能被实例化,那么有构造方法有什么用呢?
答:可以用于子类访问父类数据前,对父类数据进行初始化。
注意:abstract 不能修饰成员变量
注意:有抽象方法的类一定是抽象类(或者接口),抽象类中不一定有抽象方法。
------------------------------------------------------------------------------------------------------------------
11_面向对象(葵花宝典)
------------------------------------------------------------------------------------------------------------------
12_面向对象(抽象类练习猫狗案例)
------------------------------------------------------------------------------------------------------------------
13_面向对象(抽象类练习老师案例)
------------------------------------------------------------------------------------------------------------------
14_面向对象(抽象类练习员工案例)
------------------------------------------------------------------------------------------------------------------
15_面向对象(抽象类中的面试题)
一个抽象类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
可以,这么做目的只有一个,就是不让其他类创建本类对象,交给子类完成
abstract不可以和那些关键字共存?
static 被静态修饰的方法可以 类名. 调用,而抽象方法没有方法体这样做没有意义
final 被 final 修饰的方法不能被重写,而抽象方法最终都是要被重写的两者冲突
private 抽象方法需要被重写,而如果父类的方法被私有化,子类是看不到的无法完成重写
------------------------------------------------------------------------------------------------------------------
16_面向对象(接口的概述及其特点)
一 如何定义一个接口?
使用关键字 interface
二 如何让一个类去实现一个接口?以及各式
类 implements 接口 这就是一个类实现了该接口
接口特点
1 不能实例化
2 接口的子类要么重写它所有的抽象方法,要么也是一个抽象类或接口.
--------------------------------------------------------------------------------------------------------
17_面向对象(接口的成员特点)
A:成员常量:接口中只有常量,因为有默认修饰符 public static final
B:构造方法:没有构造方法,因为接口中所有方法不需要初始化,而且常量是静态修饰的class文件加载时就已经有值了
C:成员方法:接口中只有抽象方法,因为有默认修饰符 public abstract
--------------------------------------------------------------------------------------------------------
18_面向对象(类与类,类与接口,接口与接口的关系)
A:类与类的关系
类与类之间是继承关系,可以单继承,可以多层继承,但是不能多继承
B:类与接口的关系
类与接口是实现关系,可以单实现也可以多实现
并且还可以在继承一个类的同时实现多个接口.
C:接口与接口的关系
接口与接口是继承关系,可以单继承也可以多继承.
------------------------------------------------------------------------------------------------------------------
19_面向对象(抽象类和接口的区别)
设计理念区别
抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。
------------------------------------------------------------------------------------------------------------------
|
|