抽象类是什么?含有abstract修饰符的class即为抽象类。
特点:
1. 不能创建的实例对象
2. 可以有抽象方法
3. 可以有构造方法,但构造方法不能是抽象的
4. 抽象方法必须子类进行实现,如果子类只实现部分方法,该子类必须是抽象的。
接口是什么?含有interface修饰符的就是 。
特点:
1. 接口中的所有方法都必须是抽象的
2. 接口中的方法定义默认为public abstract类型
3. 接口中的成员变量类型默认为public static final
区别是什么
1. 单继承多实现:一个类可以实现多个接口,但只能继承一个抽象类。
2. 构造方法:抽象类可以有构造方法,接口中不能有构造方法。(JDK7之前)
3. 变量:抽象类中可以有普通成员变量,接口中只有常量。
4. 方法:抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
5. 修饰符:抽象类中的抽象方法可以使用public和protected进行修饰,但接口中的抽象方法只能使用public abstract修饰。
6. 静态方法:抽象类中可以包含静态方法,接口中不能包含静态方法
7. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
(注:JDK1.8新特性,接口可以有默认方法和静态方法)
接口的定义
package com.itheima.anno;
public interface TestInterface {
//成员变量默认修饰:public static final
public String str = "jack";
public static final String str2 = "rose";
//方法默认修饰:public abstract
void demo01();
public abstract void demo02();
}
抽象类
package com.itheima.anno;
public abstract class TestAbstract {
//抽象方法
public abstract void demo();
//普通方法
public void demo02(){
System.out.println("abc");
}
}
class Son extends TestAbstract{
//抽象方法必须子类进行实现
@Override
public void demo() {
}
}
//如果子类只实现部分方法,该子类必须是抽象的。
abstract class Son2 extends TestAbstract{
}
单继承多实现
package com.itheima.anno;
//单继承多实现
public class Hello extends C implements A,B {
@Override
public void b() {
}
@Override
public void a() {
}
@Override
void c() {
}
}
interface A {
void a();
}
interface B {
void b();
}
abstract class C {
abstract void c();
}
持续学习。日后更新~~~