本人在学习这个地方的时候把这几个概念搞的很混,后来经过多方帮忙终于搞清了其中的道理
先说说这几个概念的基本概念。
abstract由来:
从很多对象中抽取方法声明,从而定义在一个新的类中。
没有方法体的方法被称为抽象方法。有抽象方法的类被称为抽象类。
抽象类的特点:
A:抽象方法和抽象类用关键字abstract表示。
B:有抽象方法的类一定是抽象类(或者接口),抽象类中不一定有抽象方法。
C:抽象类不能被实例化,那么,怎么实例化呢?通过子类对象进行实例化。
D:如果一个类继承抽象类,那么这个类要么本身也是抽象类,要么这个类重写父类的所有抽象方法。
在继承中,我们为什么有些时候,会选择父类是抽象类?
作用:强制要求子类必须完成某些功能。
抽象类的成员特点:
A:成员变量 可以有成员变量,也可以有常量。
B:构造方法 有构造方法的。既然不能被实例化,那么有构造方法有什么用?可以用于子类访问父类数据前, 对父类数据进行初始化。
C:成员方法
可以有抽象方法,也可以有非抽象方法。
抽象方法是为了要求子类做某些事情。
非抽象方法是为了提高代码复用性,被子类继承。
多态:对象在不同时刻表现出来的不同状态。
举例:
水(水,冰,水蒸气)
狗:狗是狗,狗是动物,狗是宠物,狗是食物
前提条件:
A:要有继承关系。
B:要有方法重写。
C:要有父类引用指向子类对象。
多态间的成员特点:方法有重写。而变量没有。
A:成员变量
编译看左边,运行看左边。
B:成员方法
编译看左边,运行看右边。
多态弊端:
父类引用不能使用子类特有功能。
接口:是一种特殊的抽象类。比抽象类更抽象。因为它里面的方法都是抽象的。
接口的特点:
A:接口不能被实例化。
B:接口中的方法:
要么被子类重写。
要么子类也是抽象类。
接口的成员特点:
成员变量:接口中只有常量。
因为接口的成员变量有默认修饰符:
public static final
推荐:永远自己给出修饰符。
构造方法:
没有构造方法。
任何类如果没有继承父类,那么这个类就继承自Object类。
成员方法:接口中的方法都是抽象的。
因为接口中的成员方法有默认修饰符:
public abstract
推荐:永远自己给出修饰符。
类和接口的关系:
类与类关系:
继承关系。而且只能单继承,可以多层继承。
类与接口的关系:
实现关系。可以单实现,也可以多实现。
并且还可以在继承一个类的同时,实现多个接口。
接口与接口的关系:
继承关系。可以单继承,也可以多继承。
图中人和运动员教练都是抽象类,因为人有运动员和教练的共同行为吃饭睡觉,但睡觉不是抽象方法因为所有人的睡觉行为都一样,但吃饭就是抽象方法,因为人人都吃饭但吃的东西个不一样。运动员类也有抽象方法就是练习方法,乒乓球和篮球都有练习方法但内容个不一样,一个联系乒乓球,一个练习篮球。而且乒乓球运动员和教练都有说英语的行为但是他们都继承了运动员类和教练类不能在继承别的了,所以把说英语设成一个接口。代码如下
abstract class person
{
private int age;
private String name;
public abstract void work();
}
interface riyu
{
public abstract void sek();
}
abstract class yundong extends person
{
public void work()
{
System.out.println("联系");
}
public abstract void study();
}
class pingpang extends yundong implements riyu
{
public void study()
{
System.out.println("接发球");
}
}
class lanqiu extends yundong
{
public void study()
{
System.out.println("过人");
}
}
abstract class jiaolian extends person
{
public void work()
{
System.out.println("教人");
}
public abstract void teach();
}
class pingpangjiaolian extends jiaolian implements riyu
{
public void teach()
{
System.out.println("教接发球");
}
}
class Lanqiujiaolian extends jiaolian
{
public void teach()
{
System.out.println("教过人");
}
}
class Test5
{
public static void main(String []args)
{
System.out.println("");
}
}
|
|