多态:
概述:同一对象在不同时刻表现出来的不同状态。
前提:
A:要有继承(实现)关系。
B:要有方法重写。
C:要有父类(父接口)引用指向子类对象。
Fu f = new Zi();
解释:
Fu f:父类引用
new Zi():创建子类对象
多态的成员特点:
成员变量:编译看左边,运行看左边。
成员方法:编译看左边,运行看右边。
原因:方法有重写,而变量没有。
父类:Fu
属性:num=20;
public void show();
子类:Zi
属性:num=30;
public void show();
测试类:
Fu f = new Zi();
f.num;
f.show();
多态弊端以及解决方案:
弊端:父类引用不能使用子类的特有功能。
解决方案:在子父类间进行类型转换。
引用类型:
向上转型:从小到大。
向下转型:从大到小。
在做类型转换的时候会遇到一个转换异常,是什么异常?
ClassCastException:类型转换异常。
原因:类型不匹配。
解决方法:
重新new一个匹配的类型。
多态的好处:
提高代码的扩展性和可维护性。
举例:
class AnimalTools
{
public static void printAnimal(int a)
{
a.show()
a.method();
}
}
猫吃鱼,狗吃肉。
抽象类:
概述:有抽象方法的类。
抽象方法:没有方法体的方法。用关键字abstract修饰。
public abstract void show();
基本特点:
1、抽象方法或者抽象类必须用关键字abstract来修饰。
2、有抽象方法的类一定是抽象类(或者接口),抽象类不一定有抽象方法。
3、抽象类不能被实例化。
怎么实例化呢?
通过创建子类对象来对父类数据进行默认初始化。
4、如果一个类A继承了抽象类。
两种情况:
第一种:类A本身也是抽象类。
第二种:类A重写父类的所有抽象方法。
作用:
强制要求子类必须完成某些功能。
成员特点:
成员变量:可以是变量,也可以是常量。
构造方法:可以有构造方法。
既然抽象类不能被实例化,要构造方法有什么用?
用于子类访问父类数据前,对父类数据进行初始化。
成员方法:可以是抽象方法,也可以是非抽象方法。
抽象方法:强制要求子类必须完成某些功能。
非抽象方法:调高代码的复用性,来让子类继承的。
思考下面提出的需求,要求学员如果能理解的话自己尝试写出代码,下午回来以后讲解。
传智播客有两类老师:
基础班老师
属性:姓名,年龄
行为:讲课(JavaSE)
就业班老师
属性:姓名,年龄
行为:讲课(JavaEE)
由于讲课内容不一样,但是都有讲课的功能。
所以,我们把讲课抽取出来。定义一个Teacher类,强制要求其子类必须会讲课。
接着来再定义一个基础班老师继承Teacher,一个就业班老师继承Teacher,最后在另外一个类中测试两个不同老师的成员。
接口:
概述:比抽象类更抽象,所有的方法都是抽象方法。接口用关键字interface修饰。
接口怎么使用?
必须有具体的类来实现。
格式:
class 类A implements 接口B
{
}
习题:
接口:Animal
行为:eat()
子类:Dog
测试类:
用多态的方式来测试。
interface Animal
{
public abstract void eat();
}
class Dog implements Animal
{
public void eat()
{
System.out.println("狗吃肉");
}
}
class Test
{
public static void main(String[] args)
{
//用多态的方式来测试。
Animal a = new Dog();
}
}
接口的基本特点;
1、接口不能被实例化。
2、接口中的方法:
第一种:要么被子类重写。
第二种:要么子类是抽象类(接口)。
成员特点:
成员变量:只有常量。
所有的成员变量都有默认修饰符:public static final
构造方法:没有构造方法。
如果一个类没有继承自其他类,那么这个类默认就继承自Object类。
成员方法:接口中只有抽象方法。
所有的成员方法都有默认修饰符:public abstract
推荐:永远手动给出修饰符。
总结:接口中有且只有常量和抽象方法。
所有的类,都直接或者间接的继承自Object类。
类与接口之间的关系:
类与类:继承关系。可以单继承,也可以多层继承。
类与接口:实现关系。可以单实现,也可以多实现,
还可以在继承一个类的同时实现一个(多个)接口。
注意:多实现的时候,多个接口名之间用,隔开。
接口与接口:继承关系。可以单继承,也可以多继承。
注意:多继承的时候,多个接口名之间用,隔开。
接口的思想特点:
1、接口是对外暴露的规则。
2、接口是程序对外的功能扩展。
3、接口的出现降低了“耦合性”。
4、接口可以多实现。
设计原理:
高内聚,低耦合。
内聚:指的是类本身独立完成某些功能的能力。
耦合:类与类之间的关系。
抽象类和接口的区别:
1、成员特点
抽象类:
成员变量:可以是变量,也可以是常量。
构造方法:有。
成员方法:可以是抽象的,也可以是非抽象的。
接口:
成员变量:只能是常量。
构造方法:没有。
成员方法:只能是抽象方法。
2、关系特点:
类与类:继承关系,只支持单继承,可以多层继承。
类与接口:实现关系。可以单实现,也可以多实现,还可以继承一个类的同时实现一个(多个)接口。
接口与接口:继承关系。可以单继承,也可以多继承。
3、设计理念的区别:
抽象类:存的是整个继承体系的同性内容。(is a的关系)
接口:存的是整个继承体系的扩展内容。(like a的关系)
乒乓球运动员和乒乓球教练
篮球运动员和篮球教练
为了出国交流,乒乓球运动员和教练需要说英语。
请你用所学知识,分析这里应该有哪些类,抽象类,接口。
步骤:
分析:由具体的到抽象的。
人类:抽象类
属性:姓名,年龄
行为:吃饭,睡觉
运动员:抽象类
行为:练习
乒乓球运动员
篮球运动员
教练:抽象类
行为:指导
乒乓球教练
篮球教练
接口:说英语
实现:由抽象的到具体的。
使用:使用具体的类。
|
|