Java面向对象编程(3)--抽象类,接口,final
接口---注意事项
1, 接口不能被实例化
2, 接口中所有的方法都不能有实体,
3, 一个类可以实现多个接口
//一个接口
Interface KKK
{
Public voidcry();
}
//usb接口
Interface Usb
{
Public void cry();
}
Class Camera implements Usb,KKK
{
}
4, 接口中可以有变量,但是变量不能用private和proteced修饰
a,接口中的变量,本质上都是static 的,而且是final,不管你加不加static修饰
b,在java开发中,我们经常把经常用到的变量,定义在接口中,作为全局变量使用。放访问形式:接口名.变量名
5, 一个接口不可以继承其他的类,但是可以继承别的接口,言外之意就是这个接口有多了一个方法。
继承和实现接口是可以同时发生的。
实现接口VS继承类
案例:一直猴子想要鱼和鸟的功能。
//鱼的接口
interface Fish
{
publicvoidswimming();
}
//鸟的接口
interface Bird
{
publicvoidflying();
}
//父类猴子
class Monkey
{
intname;
//跳
publicvoidjump()
{
System.out.print("猴子会跳");
}
}
//子类小猴子
class LittleMonkey extends Monkey implements Fish,Bird
{
public void swimming() {
// TODO Auto-generated method stub
}
public void flying() {
// TODO Auto-generated method stub
}
}
谁实现接口,如果有错,那么也就那个实现接口的类报错,但是如果是类的继承,如果有错,必定会有很多类报错,看上图即知。
案例:用接口实现多态。卖小汽车。
package com.pan;
public classDemo9_24_3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
CarShop ashop = new CarShop();
//卖出一辆宝马
ashop.sellCar(new BMW());
//卖出一辆奇瑞QQ
ashop.sellCar(new CheryQQ());
System.out.print("总收入"+ashop.getMoney());
}
}
//汽车的接口,规定汽车的一些功能
interface Car
{
//汽车的名称
StringgetName();
//获得汽车的售价
int getPrice();
}
//宝马
class BMW implementsCar
{
publicString getName()
{
return "BMW";
}
publicintgetPrice()
{
return 300000;
}
}
//奇瑞QQ
class CheryQQ implements Car
{
publicString getName()
{
return "Chery QQ";
}
publicintgetPrice()
{
return 200000;
}
}
//汽车出售店
class CarShop
{
//售车收入
private int money = 0;
//卖出一部车
public void sellCar(Car car)
{
System.out.println("车型:"+ car.getName()+"单价"+car.getPrice());
money += car.getPrice();
}
//售车的总收入
public int getMoney()
{
return money;
}
}
结果:
理解:
class Changan implements Car
{
public StringgetName()
{
return "Changan";
}
publicintgetPrice()
{
return 200000;
}
}
直接添加关于这个汽车类型的类
Final ---概念
作用:修饰变量和方法可以
在某些情况下,程序员可能有以下的需求
1, 当不需要父类的某个方法被子类覆盖的时候,可以用final关键字修饰
2,当不希望类的某个变量的值被修改的时候,可以用final修饰
如果一个变量是final修饰的,那么必须赋初值
3,当不希望类被继承的时候,可以用final 修饰
Final—注意事项
1,final修饰的变量又叫常量。一般用xx_xx_xx来命名
2,final修饰的变量在定义的时候,必须赋值,并且以后都不能赋值
final—什么时候使用
1,因为安全的考虑,类的某个方法是不准被修改的
2,类不会被其他类继承
3,某些变量值是固定不变的,比如圆周率3.1415926.