抽象的概念就是抽象出共同属性:成员变量和方法
定义抽象使用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,一个类可以实现多个接口,但只能继承一个抽象类。
在应用上的区别:
接口更多的是在系统框架设计方法发挥作用,主要定义模块之间的通信,而抽象类在代码实现方面发挥作用,可以实现代码的重用