JAVA(十二)java面向对象6-抽象类和接口

JAVA(十二)java面向对象6-抽象类和接口


抽象类
当描述一个类的时候,如果不能确定功能函数如何定义,那么该类就可以定义为抽象类,功能函数应该描述为抽象函数。

抽象类的实现方式
关键字abstract

abstract class Animal {
    String color;
    abstract void shout();
}

class Dog extends Animal {
    void shout() {
        System.out.println("旺旺");
    }
}

class Bird extends Animal {
    void shout() {
        System.out.println("叽叽喳喳");
    }
}

抽象类的特点
1.有抽象函数的类,该类一定是抽象类。
2.抽象类中不一定要有抽象函数。
3.抽象类不能使用new创建对象。(抽象类的方法,没有方法体)
4.抽象类主要为了提高代码的复用性,让子类继承来使用。
5.编译器强制子类实现抽象类父类的未实现的方法。(可以不实现,前提是子类的也要声明为抽象的。)

抽象的优点
1.提高代码复用性。(强制子类实现父类中没有实现的功能)
2.提高代码的扩展性,便于后期的代码维护

注意:
抽象类不能创建对象,那么抽象类中是否有构造函数?
:抽象类中一定有构造函数。主要为了初始化抽象类中的属性。通常由子类实现。
final和abstract是否可以同时修饰一个类? (static,private.都不行)
:一定不能同时修饰


接口
interface:在java中的接口主要是用来拓展定义类的功能,这样可以弥补java中单继承的缺点。

接口的定义格式:

interface 接口名{
    属性
    抽象方法
}

特点:
1.类实现接口可以通过implements实现,实现接口的时候必须把接口中的所有方法实现,一个类可以实现多个接口。
2.接口中定义的所有的属性默认是public static final的,即静态常量,既然是常量,那么定义的时候必须赋值。
3.接口中定义的方法不能有方法体。接口中定义的方法默认添加public abstract
4.有抽象函数的不一定是抽象类,也可以是接口类。
5.由于接口中的方法默认都是抽象的,所以不能被实例化。
6.对于接口而言,可以使用子类来实现接口中未被实现的功能函数。
7.如果实现类中要访问接口中的成员,不能使用super关键字。因为两者之间没有显示的继承关系,况且接口中的成员成员属性是静态的。可以使用接口名直接访问。
8.接口没有构造方法。


抽象类与接口之间的区别
1.接口只能有public abstract方法,而抽象类的方法类型更多,可以有普通的方法。
2.接口中的成员变量默认是public static fianl类型的,抽象类的变量类型更多,可以有普通变量。
3.接口中不能含有静态代码块。而抽象类可以有静态代码块和静态方法。
4.一个类可以继承一个抽象类,而一个类却可以实现多个接口。

在设计层面上的区别,我还并不能完全理解,这里借用一下“烧麦鸵鸟”的说法:
1.抽象类是对事物的抽象(类的抽象),接口是对行为的抽象。
2.抽象类是一种模板式设计,接口是一种行为规范,一种辐射式设计。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章