抽象类与接口

Posted 霸王龙168

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象类与接口相关的知识,希望对你有一定的参考价值。

抽象类中能定义普通方法  属性

抽象类里面不止有抽象方法

有抽象方法的类一定是抽象类

抽象类虽然不能实例化,但是可以有构造函数

子类继承父类   在创建子类对象实例的时候 会先创建父类实例,此时抽象类的构造器就能被调用了

abstract class Person{ // 定义一个抽象类

    public Person(){
        System.out.println("父 抽象类 构造器");
    }

    public void print() { // 普通方法
        System.out.println("抽象类的普通方法");
    }
    // 此方法并没有方法体的声明,并且存在有abstract关键字,表示抽象方法
    public abstract void func();
}

// 一个子类只能够继承一个抽象类,属于单继承局限
class student extends Person{ // B类是抽象类的子类并且是一个普通类


    public student() {
        System.out.println("子类构造器");
    }

    public void func(){
        System.out.println("Hello world");
    }

    public void print() { // 普通方法
        System.out.println("子类的普通方法");
    }

}

public class test{
    public static void main(String args[]){
        Person a = new student(); // 向上转型
        a.func(); // 被子类所覆写过的方法
        a.print();
        student stu = (student) a;
        a.print();
    }
}

输出
父 抽象类 构造器
子类构造器
Hello world
子类的普通方法
子类的普通方法

  抽象类 还可以有静态方法  属性  和普通类差不多  就是不能实例化

 

 

接口

接口内可以定义属性  不过会被public static final修饰   这样应该是变成了一个常量了

 

java8以后 接口可以定义静态方法

 

接口中不止有抽象方法 还能有default方法  被deault修饰的方法所有方法体的

 

接口不能有代码块

 

太菜了

 

抽象类与接口的区别

抽象类的定义:

成员属性:可以是变量,也可以是常量

成员方法:可以抽象,也可以非抽象(比如:构造方法是一定会有的)

接口类的定义:

成员属性:只能是常量(public static final)

成员方法:只能是抽象(接口没有构造方法,像太监没有小JJ)

多态的区别:

类与类:

继承,单一继承(亲爹只有一个)

类与接口:

实现,单一、多重实现(可以认多个干爹)

接口与接口:

继承,单一、多重继承(可以认多个干爹)

设计理念区别:

抽象类被继承体现的是:“is a”的关系。抽象类中定义的是该继承体系的共性功能。(例如亲爹:直属血缘关系)

接口被实现体现的是:“like a”的关系。接口中定义的是该继承体系的扩展功能。(例如干爹:认契、过继关系)

以上是关于抽象类与接口的主要内容,如果未能解决你的问题,请参考以下文章

关于抽象类与接口的选择

python接口类与抽象类

多态抽象类与接口

Android面试每日一题:抽象类与接口的区别?

Android面试每日一题:抽象类与接口的区别?

Python中的接口类与抽象类