java(4)抽象类和接口

来源:互联网 发布:java api中文文档 编辑:程序博客网 时间:2024/06/05 15:18

抽象类

使用abstract修饰的类成为抽象类,使用abstract修饰的方法称为抽象方法。在解决实际问题是,一般将父类定义位抽象类,继承树越向上类就越抽象。在多态机制中,并不需要父类初始化对象。

/* * 抽象类的必要性:解决父类方法的不确定性 *  * */package jerryzaki;public class Demo5 {    public static void main(String[] args) {        // TODO Auto-generated method stub    }}abstract class Dongwu{//抽象类不能实例化也就是不能创建对象    String name;    int age;    abstract public void cry();//子类cry()中必须实现}//当父类是抽象类的时候,子类要实现抽象类的抽象方法(和接口相似)class Mao extends Dongwu{    public void cry() {//实现父类抽象类方法        System.out.println("猫猫叫");    }}

接口

接口是更纯粹的抽象类
总结:接口中的字段都是public+private+final;
/*
* 接口
*
* 接口不能被实例化
* 接口中不能有实现的方法,都不能被实现
* 一个类可以连接多个接口
* 接口中的变量本质上都是静态的 static 而且是final 不论加不加static,并且不能用private修饰
* 接口变量是static+final+public,我们把经常用的变量放在接口中,因为他是静态的
* 接口不能继承类,但可以继承别的接口
* 接口体现了多态和高内聚低耦合的设计思想
* */

package jerryzaki;

public class Test1 {

public static void main(String[] args) {    // TODO Auto-generated method stub    //System.out.println(Usb.a);    Computer computer=new Computer();    Camera camera1=new Camera();    Phone phone1=new Phone();    computer.useUsb(camera1);    computer.useUsb(phone1);}

}

interface Usb{//接口声明
public void start();
public void stop();
}

//一个重要的原则 这个类实现了这个接口 则要求 实现找这个接口的所有方法
class Camera implements Usb{ //链接接口与类?
public void start() {//前面声明过得所有方法都必须实现
System.out.println(“相机开始工作”);
}
public void stop() {
System.out.println(“相机停止工作”);
}
}

class Phone implements Usb{
public void start(){
System.out.println(“手机开始工作”);
}
public void stop(){
System.out.println(“手机开始工作”);
}
}
class Computer{
public void useUsb(Usb usb) {
usb.start();
usb.stop();
}
}

接口与继承

/* * 实现接口与继承 *  * java的继承是单继承,1实现接口可以看作是对继承的补充 * 2接口可以在不打破继承关系的前提下,对某个功能扩展 *  * */package jerryzaki;public class Test2{    public static void main(String[] args) {        // TODO Auto-generated method stub    } }interface Pig{    public void swim();}interface Bird{    public void fly();}class Monkey{    int age;    String name;    public void jump(){        System.out.println("猴子会跳");    }}class LittleMinkey extends Monkey implements Pig,Bird{    @Override    public void swim() {        // TODO Auto-generated method stub    }    @Override    public void fly() {        // TODO Auto-generated method stub    }}

接口与多态

/* * 接口与多态 *  * *///接口是一类对象的抽象,比如交通工具,不论是汽车还是飞机都是交通工具,他们可以有一个共同的方法run();package jerryzaki;public class Test3{public static void main(String args[]){       //父类引用指向子类对象       Vehicle vehicle = new Car();       //此时执行car类的run方法,输出 汽车行驶中。。。。       vehicle.run();       vehicle = new Plane();       //此时执行plane类的run方法,输出 飞机飞行中。。。。。。       vehicle.run();       //虽然调用的都是vehicle这个接口的run方法,但是由于指向的对象不同(而对象都实现了这个接口并且重写了其中的run方法,所以输出的结果是不一样的,这就是多态。      //多态并不只是通过接口才可以实现,父类也可以、实际上接口也是类,只不过是一个所有方法都是抽象方法的类,是一个完完全全的抽象类。      //多态的三个必要条件      //1:继承(extends,implements)        //2:重写 Override        //3:父类引用指向子类对象,就像上面例子中定义了一个vehicle对象,实际new 的是Car或者Plane       //这样调用父类引用被重写的方法时就会有多态存在    }}interface Vehicle{   void run();}//那么所有的实现了vehicle这个接口的类必须重写接口内的方法//汽车class Car implements Vehicle{   @Override   public void run(){      System.out.println("汽车行驶中......");   }}//飞机class Plane implements Vehicle{       @Override       public void run(){          System.out.println("飞机飞行......");    }}