目录
一起进步吧!
接口
1、接口的定义
接口用于规范对象应有的行为。接w口定义形式如下:
interface 接口名
{
//符号常量定义
//方法声明
}
在接口中定义的域(变量)必须是常量,它的值不能被实现它的类重新赋值。
接口中也只能对方法进行声明,不能定义方法体。
接口可以看作是一种特殊的抽象类,可以有多个父接口;
一个接口的完整定义为如下形式:
interface 接口名 extends 父接口列表
{
//符号常量定义
//方法声明
}
2、接口变量
定义了一个接口,相当于定义了一种新的数据类型,就可以以这种新的数据类型定义变量。
用接口定义的变量称为接口变量。接口变量的定义形式:
接口名 接口 变量列表;
用接口变量表示实现它的类的对象,接口变量可以称作是对象的上转型对象。作为上转型的接口变量调用方法时,调用的是”子类“中实现的接口中的方法。(体现多态性)(可借下述代码理解)
3、接口的使用
接口必须通过类才能使用。
如果一个类定义了接口中的所有方法,称这个类实现了接口。如果有一个接口方法没有在”类名“类中定义,则该类为抽象类。
Java不支持多重继承,但一个类可以同时实现多个接口。
4、不同类实现接口实例
抽象类
1、抽象类的定义
关键词abstract修饰的类就是抽象类。抽象类的定义形式如下:
abstract class 类名
{
//类体
}
抽象类中也可以定义域和方法,但不能生成抽象类的实例,因为抽象类描述的是不存在的事物。
定义抽象类的目的在于使行为相似的对象有共同的父类,则可以用父类对象表示子类对象,从而实现多态性。
2、抽象方法的定义
用关键字修饰的方法就是抽象方法。抽象方法只有方法的声明(方法头部),而没有方法的实现。
抽象方法的定义形式如下:
abstract 方法类型方法名([形式参数]);
抽象方法的定义由子类实现,所有抽象方法一定不能用final修饰!
如果一个类声明了抽象方法,则该类一定要定义成抽象类!
抽象类中也可以定义非抽象方法!
3、抽象类实例
public static void main(String[] args) {
Transport a;//声明一个交通工具类的对象
//a=new Transport(); 不允许,因为Transport是一个抽象类
a=new Rocket("长征四号",2200);
a.run();
a=new Ship("鸡舰",23);
a.run();
}
}
abstract class Transport{//抽象类的交通工具类
int speed;
String name;
public Transport() {//构造方法
}
public Transport(String name,int speed) {
this.name=name;
this.speed=speed;
}
public abstract void run();//抽象方法
}
class Rocket extends Transport{
public Rocket(String name,int speed) {
super(name,speed);
}
@Override
public void run() {
System.out.println(name+"火箭以"+speed+"km/h的速度在太空环游。");
}
}
class Ship extends Transport{
public Ship(String name,int speed) {
super(name,speed);
}
@Override
public void run() {
System.out.println(name+"船以"+speed+"km/h的速度在水里乱转。");
}
}
Transport类描述的对象不是具体事物,所有这里定义为抽象类,类中run()方法定义为抽象方法。
抽象类与接口的区别
接口与抽象类非常相似,甚至可以相互取代;
不同:抽象类用于表示同一类对象的共同属性和行为,而接口可以表示不同类的对象的属性和行为,这是概念上的不同
接口用于规范不同类的对象应具有的操作,但每类对象的具体操作由具体类定义。
可以看出接口实例中把Charge定义为抽象类也行,但概念上有本质的不同——关键在于它们不是同一个类,不能有共同的父类。