JAVA基础复习与总结<四> 抽象类与接口

抽象类(Abstract Class

是一种模版模式。抽象类为所有子类提供了一个通用模版,子类可以在这个模版基础上进行扩展。通过抽象类,可以避免子类设计的随意性。通过抽象类,我们就可以做到严格限制子类的设计(子类必须实现抽象方法)  ,使子类之间更加通用。 

 

要点: 

1、有抽象方法的类只能定义为抽象类。 

2、抽象类不能实例化,不能用new来实例化抽象类,即不能用来创建对象。 

3、抽象类可以包含属性、方法、构造方法。但是构造方法不能用来new实例,只能用来被子类调用。 

4、抽象类只能用来继承。

5、抽象方法必须被子类实现。 抽象方法必须是protectpublic

6、抽象类和抽象方法前面要加上abstract关键字来修饰。

 

 

 

抽象类的重要优势就是把程序的设计和实现给分开了。 

package TestAbstract; 

 

public abstract class Animal {   //包含了抽象方法的类一定是抽象类 

    public abstract void run(); //抽象方法,没有实现只有声明 

    public void breath(){ 

        System.out.println("呼吸"); //抽象类里面也可以定义普通方法 

    } 

    String str; //可以定义普通属性 

} 

 

 

class Cat extends Animal{   //子类必须实现抽象父类的抽象方法,否则编译不通过 

 

    public void run(){ 

        System.out.println("猫步小跑"); 

    } 

} 

 

class Dog extends Animal{ 

 

    public  void run(){ 

        System.out.println("狗跑"); 

    } 

 

} 

 

 

 

 

接口(Interface)

比抽象类还要抽象(抽象类里面还能定义具体方法) 

接口就是规范 

 

为什么需要接口?接口和抽象类的区别? 

1、接口就是比抽象类还要抽象的抽象类,可以更加规范地对子类进行约束。全面地专业地实现了:规范和具体实现的分离。 

2、接口就是规范,定义的是一组规则,体现了现实世界中如果你是。。。则必须能。。的思想 

3、接口的本质是契约,就像人间法律。制定好了以后大家都能遵守 

4、项目的具体需求是多变的,我们必须以不变应万变才能从容开发,此处的不变就是规范。因此,我们开发项目往往都是面向接口的编程。  

 

 

注意: 

1、子类通过implements来实现接口中的规范 

2、接口不能创建实例,但是可以用于声明引用变量类型 

3、一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public 

4、接口支持多继承 

 

 

//接口的规范 

public interface InterfaceTest {   //定义一个接口,编译以后生成的还是class文件 

    //接口中只有:常量和抽象方法

    //抽象方法指的是只有方法声明而并没有具体实现的方法

    String MAX_GREAD = "BOSS"; 

 

    /* public static final */ int MAX_SPEED = 120; 

    //接口中定义常量时写或不写总有静态说明 (本来想定义一个变量,但这里隐式直接划定为常量)

 

 

    public void test01(); 

    public int test02(int a ,int b); 

    //此处public也可以不声明,因为在接口中方法必然是公开的 

} 

//意义在于设计与实现分离

 

 

public class MyClass implements InterfaceTest { 

    @Override                                                           

    public void test01 () {                                         //一个类实现了接口,必须实现接口中所有方法 

        String r = InterfaceTest.MAX_GREAD;          //并且这些方法只能是public

        System.out.println("test01"); 

    } 

 

    @Override 

    public int test02 ( int a, int b ) { 

        System.out.println("MyClass.test02()");

        return a+b; 

    } 

}

 

 

 

 

 

//接口的多继承 

public interface InterfaceA { 

void aaa(); 

}

 

interface  InterfaceB{ 

    void bbb(); 

}

 

interface InterfaceC extends InterfaceA,InterfaceB{ 

    void ccc (); 

}

 

class  TesClass implements  InterfaceC{  //证明了接口是有多继承机制 

    @Override 

    public void aaa () { 

 

    }

 

    @Override 

    public void bbb () { 

 

    }

 

    @Override 

    public void ccc () { 

 

    }

}

 

 

 

猜你喜欢

转载自www.cnblogs.com/ErictChandler/p/9576762.html
今日推荐