一,abstract关键字
abstract可以修饰类或方法
public abstract class demo {
public abstract void MyMethod();
}
要点:
1,含有abstract方法的类一定是抽象类(abstract修饰),但抽象类并不一定有abstract方法;
2,如果 abstract 类的子类没有实现其超类的所有 abstract 方法,该子类也是 abstract 类;
3,
abstract class类中定义抽象方法必须在具体(Concrete)子类中实现;
4,不能有抽象构造方法或抽象静态方法。
所以,
二,接口
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。
1,接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final;
2,抽象类中只包含常量和方法的定义,而没有变量和方法的实现
4,不能有抽象构造方法或抽象静态方法。
public abstract class demo {
public abstract void myMethod1();
public abstract void myMethod2();
public void myMethod3(){
System.out.println("可以不是抽象方法");
};
//abstract demo(){}
//static abstract void myMethod();
}
//这里的abstract去掉会报错
abstract class son1 extends demo{
public void myMethod1(){
System.out.println("实现方法MyMethod1()");
}
}
//abstract class类中定义抽象方法全部实现
class son2 extends demo{
public void myMethod1(){
System.out.println("实现方法MyMethod1()");
}
public void myMethod2(){
System.out.println("实现方法MyMethod2()");
}
}
所以,
-
abstract 关键字不能应用于 static、private 或 final 方法,因为这些方法不能被重写,因此,不能在子类中实现。
-
final 类的方法都不能是 abstract,因为 final 类不能有子类。
二,接口
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。
1,接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final;
2,抽象类中只包含常量和方法的定义,而没有变量和方法的实现
interface interfaceDemo {
//默认public static final 类型
int id=0;
public static final String name="";
//默认public abstract类型
void method1();
public abstract void method2();
}
class son implements interfaceDemo{
public void method1() {
}
public void method2() {
}
}