Java基础之抽象类与接口

Posted liualex1109

tags:

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

1.抽象类

抽象就是从多个事物中将共性的,本质的内容抽取出来。在Java中用abstract关键字修饰class来表示抽象类。

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

public abstract class Animal {

}

关于抽象类和抽象方法的使用注意:

(1)抽象类和抽象方法必须使用abstract关键字修饰。

(2)抽象类不能实例化,即使有构造函数。只能使用多态的方法来实例化。

abstract class Animal {

}

class Cat extends Animal {

}

Animal obj = new Cat();

(3)抽象类不一定有抽象方法,但是有抽象方法的类一定是抽象类。

(4)关于抽象类的子类,要么全部实现了该抽象类的抽象方法,要么该子类也是抽象类,只实现或不实现部分抽象方法。

(5)抽象类的成员变量可以是变量,也可以是常量(用final修饰)。

(6)abstract关键字只能修饰类和方法,不能修饰成员变量(属性)。

(7)抽象类也是可以有构造方法的,该构造方法可以被子类调用来初始化抽象类的成员变量。

abstract class Animal {
    private String name;
    private int age;
    
    
    public Animal(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    public abstract void eat();

  /*
  get/set ...
  */ }
class Cat extends Animal { public Cat(String name, int age){ super(name,age); } @Override public void eat() { // TODO Auto-generated method stub System.out.println("吃小鱼干"); } }

 

(8)abtract关键字不能与static、final、private关键字共存。

(9)抽象方法不能有方法体,即没有{}。

public abstract void run();

 (10)构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。

abstract class Person {
    //Illegal modifier for the constructor in type Person; only public, protected & private are permitted
    /*abstract Person(){
        //错误写法
    }*/
    
    //public static abstract void run();
}

 

2.接口

接口(Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。

[可见度] interface 接口名称 [extends 其他的接口名] {

// 声明变量 // 抽象方法
}

接口的特性:

(1)接口是隐式抽象的,当声明一个接口时,不必使用abtract关键字。

(2)接口中的方法也是隐式抽象的,声明同样不需要abstract关键字。

(3)接口中的方法和属性都是公有的(public)。

(4)当声明接口时,只能使用public和abstract来修饰。

(5)接口中的方法只能用 public, abstract, default, static 来修饰。

(6)当类实现接口时,类要实现接口中所有的方法,否则,类必须声明为抽象类。

interface AInterface {
    public void run();
}

class A implements AInterface {

    @Override
    public void run() {
        // TODO Auto-generated method stub
        
    }
    
}

abstract class B implements AInterface {

}

(7)类是单继承,多实现的。一个接口也可以继承另一个接口,但不能实现另一个接口。而且接口可以多继承。

interface AInterface {
    public void run();
}

interface BInterface {
    public void eat();
}

interface CInterface extends AInterface,BInterface{
    
}

class C implements CInterface {

    @Override
    public void run() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void eat() {
        // TODO Auto-generated method stub
        
    }
    
}

(8)接口中的成员变量实际是用public static final修饰的。

(9)标记接口:标记接口是没有任何方法和属性的接口.它仅仅表明它的类属于一个特定的类型,供其他代码来测试允许做一些事情。

(10)接口是无法被实例化的,也没有构造函数。


 

3.接口与类的相似点和区别:

(1)一个接口可以有多个抽象方法;

(2)接口不能用于实例化对象;

(3)接口没用构造方法;

(4)接口中的所有方法必须是抽象方法。(Java1.8允许存在用static和default修饰的方法);

(5)接口不能包含成员变量,除了static和final变量;

(6)接口支持多继承;


 

4.抽象类和接口的区别:

(1)抽象类的方法可以有方法体,但接口中的方法不行;

(2)抽象类的成员变量可以是各种类型的,而接口的成员变量只能是public static final类型

(3)一个类只能继承一个抽象类,而一个类可以实现多个接口。

 

 

以上部分内容来自于 Java菜鸟教程  https://www.runoob.com/java/java-interfaces.html

 

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

Java——基础知识——抽象类与抽象方法接口

抽象类与接口的异同

Android -- 面试复习指南之 Java 基础

12. Java基础之抽象类和接口

Java基础--抽象类与接口

java基础-抽象类与接口(转)