Java基础-四要素之一《抽象》(接口)

抽象的概念就是抽象出共同属性:成员变量和方法

定义抽象使用abstract关键字定义抽象类和方法

抽象类 abstract class
 包含抽象方法的类,叫抽象类。

所以抽象类可以有private等多种权限的成员变量和非abstract的成员方法。当然抽象方法是一定要有的

抽象类是用于单一继承的,不能实例化

  而继承类一定要实现抽象方法,因为抽象方法在抽象类里是没有实现行为的,访问权限只能是public。而非抽象方法则可以赋予方法的默认行为,访问权限可以多种,但需要考虑非抽象方法是否需要被继承类访问。

接口 interface 
  接口,用于多重继承,也不能实例化。只能包含static final的成员变量,不过在interface中一般不定义成员变量。而成员方法在接口里只能是抽象方法,访问权限只能是public。

 所以,无论抽象类还是接口,抽象方法都需要在子类中实现,而且在子类中实现这些方法一个都不能少。而抽象类里面的非抽象方法,则在子类可以不重写实现里面的行为

public class Child extends Children implements Lover{ 
    public Child(String name) { 
        super(name); 
    } 
 
    public void printName() { 
        System.out.println(super.getName()); 
    } 
 
    public void love(String name) { 
        System.out.println(name + ", I love you!"); 
    } 
 
    public static void main(String[] args) { 
        Child boy = new Child("Charley"); 
        System.out.println(boy.getName()); 
 
        Child girl = new Child("Queenie"); 
        girl.printName(); 
 
        boy.love(girl.getName()); 
        girl.love(boy.getName()); 
    } 
} 
 
abstract class Children { 
    private String name; 
 
    public Children(String name) { 
        this.name = name; 
    } 
 
    //private then Child obj can not access this method 
    //private String getName() { 
    public String getName() { 
        return name; 
    } 
 
    abstract void printName(); 
 
    //haha()在子类中没有被实现 
    //abstract void haha(); 
} 
 
interface Lover{ 
    void love(String name); 
} 

 Java接口和Java抽象类的区别

   1,抽象类里可以有构造方法,而接口内不能有构造方法。
   2,抽象类中可以有普通成员变量,而接口中不能有普通成员变量。
public String pas ;//接口中定义会报错
   3,抽象类中可以包含非抽象的普通方法,而接口中所有的方法必须是抽象的,不能有非抽象的普通方法。
   4,抽象类中的抽象方法的访问类型可以是public ,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
   5,抽象类中可以包含静态方法,接口内不能包含静态方法。
   6,抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public  static类型,并且默认为public static类型。
   7,一个类可以实现多个接口,但只能继承一个抽象类。

在应用上的区别:

     接口更多的是在系统框架设计方法发挥作用,主要定义模块之间的通信,而抽象类在代码实现方面发挥作用,可以实现代码的重用

原文地址:https://www.cnblogs.com/hwaggLee/p/4491384.html