玉不琢,不成器;人不学,不知道。 ——礼记·学记
本讲内容:接口、final类
一、接口
Java中只支持单继承,即一个类只能有一个父类。为了提供类似多重继承的功能,Java提供了接口(Interface)机制。但接口不仅仅是为了解决多重继承问题才出现的。接口拥有多重继承的好处,而且没有多重继承的缺点---多重继承的缺点全部来源于实现全部继承,关键在于接口只有abstract(默认、不用写)方法和常量。
譬如下面例子:有些动物和不能和人亲近玩耍的,不能继承。
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">class Animal{
public void eat() {
System.out.println("吃");
}
public void sleep() {
System.out.println("睡");
}
}
interface Pet{
void play();
}
class Tiget extends Animal{}
class Cat extends Animal implements Pet{
public void play() {
System.out.println("猫是可以亲近玩耍的");
}
}
public class danmei {
public static void main(String[] args) {
Cat a=new Cat();
a.eat();
a.sleep();
a.play();
}
}</span></span></span>
运行的结果是:
<span style="font-size:18px;"><span style="font-size:18px;">吃
睡
猫是可以亲近玩耍的</span></span>
注意:
1、接口名用 interface 修饰, 相对应的 类名用 class修饰
2、接口里定义的方法都是抽象方法,可以用abstract修饰,当然也可以不用它修饰
3、接口只能被实现 ( implements )
4、可以用抽象类实现接口,也就是说虽然实现了,但是没有真正写接口的任何方法,它把责任推给了抽象类的子类
5、普通类实现接口,则必须按照接口的契约,实现接口所定义的所有方法。
6、接口可以继承接口。
7、一个接口可以继承多个父类,也就是说一个接口之间可以多重继承。
8、接口不能直接实例化,只能new 一个它的实现类
9、接口是更加抽象的抽象类,抽象类的方法可以有方法体,而接口不可以。
10、接口可以有变量(是常量但不可以用private、protected修饰,默认是static)
接口与多态的应用例子
//汽车接口
interface Car{
//获得汽车名称
String getName();
//获得汽车售价
int getPrice();
}
class BMW implements Car{
public String getName() {
return "BMW";
}
public int getPrice() {
return 1000000;
}
}
class BYD implements Car{
public String getName() {
return "BYD";
}
public int getPrice() {
return 100000;
}
}
//汽车出售店
public class CarShop {
//售车收入
private int money=0;
//卖出一部车
private void sellCar(Car car) {
System.out.println("车型:"+car.getName()+"单价"+car.getPrice());
money+=car.getPrice();
}
//售车总收入
public int getMoney(){
return money;
}
public static void main(String[] args) {
CarShop a=new CarShop();
//卖出一辆宝马
a.sellCar(new BMW());
a.sellCar(new BYD());
System.out.println("总收入:"+a.getMoney());
}
}
打印:
车型:BMW单价1000000
车型:BYD单价100000
总收入:1100000
二、final(最终)类
类有3个修饰符:public 、abstract、final。一个final类,表示此类不能派生子类。String类就是典型
1、final可以修饰类、方法、变量
2、被final修饰后的类不可以被其它类继承
3、被final修饰后的方法不可以被重写
4、被final修饰后的变量不可以改变(即为常量),一般用xx_xx_xx来命名
5、被final修饰的变量,必须赋值,并且以后不再赋值
本讲就到这里,Take some time and enjoy it