抽象类
如何定义抽象类?
语法格式:abstract class 类名{ }
抽象类的注意事项:
*抽象类无法被实例化
*虽然抽象类无法被实例化,但是抽象类也有构造方法。该构造方法是为了给子类创建对象而使用的。
*抽象类中可以定义抽象方法。
抽象方法定义格式:
public abstract void 方法名();(后跟分号)
*抽象类中不一定要有抽象方法,但是抽象方法要一定在抽象类当中。
*非抽象类继承抽象类,必须要在子类中将抽象方法实现!否则就会出错。
abstract关键字不能与private、final、static关键字共存。
abstract关键字修饰的方法需要在子类中被实现,而private关键字修饰的方法不能被继承,所以二者冲突。
final修饰的方法不能被重写。这与abstract关键字修饰的方法要重写也冲突。
static与abstract不能共存。
代码:
public abstract class abstractTest {
//Constructor
public abstractTest() {
System.out.println("a....");
}
//抽象方法
public abstract void m1() ;
public static void main(String[] args) {
//抽象类无法创建对象
//abstractTest abstractTest=new abstractTest();
//多态
abstractTest a=new A();
}
}
//一个类继承了抽象类,如果抽象类中有抽象方法的话,必须在类中将抽象方法实现或者将子类改成抽象类。
class A extends abstractTest{
public void m1() {
}
public A() {
super();//父类的构造方法虽然使用了,但是并没有创建父类对象。
System.out.println("A....");
}
}
接口
接口也是一种引用类型,可以等同看做类。
接口是一种特殊的抽象类,接口是完全抽象的。
如何定义接口?
语法格式:
[修饰符] interface 接口名{ }
接口中需要注意的事项:
*接口中只能出现常量、抽象方法。
*接口中没有构造方法,接口无法被实例化
*接口与接口之间可以实现多继承
*一个类可以实现多个接口
*非抽象类实现接口,必须将接口中的方法“实现”/“重写”
代码:
public class interFaceTest {
public interface A{
//常量(必须用public static final 修饰)
public static final String SUCCCESS="success";
public static final double PI=3.14;
//public static final是可以省略的。
byte MAX_VALUE=127;//常量
//抽象方法(接口中所有的抽象方法都是public abstract)
public abstract void m1();
//public abstract是可以省略的。
void m2();//抽象方法
}
}
interface B{
void m1();
}
interface C{
void m2();
}
interface D{
void m3();
}
interface E extends B,C,D{
void m4();
}
//implements是实现的意思,是一个关键字
//implements和extends意义相同。
class Myclass implements B,C{//实现多个接口,也必须将接口中的所有方法全部实现;
public void m1() {
}
public void m2() {
}
}
类、接口之间的关系
类与类之间的关系:
继承关系,只能单继承,但是可以多层继承。
类与接口之间的关系:
实现关系,可以多个接口实现。
接口与接口之间的关系:
继承关系,但是可以多继承。
interface B{
void m1();
}
interface C{
void m2();
}
interface D{
void m3();
}
interface E extends B,C,D{//多继承
void m4();
}
抽象类与接口的区别
成员区别:
抽象类:
成员变量:变量、常量
构造方法:有
成员方法:抽象方法、非抽象方法
接口:
成员变量:常量
构造方法:无
成员方法:抽象方法
设计区别:
抽象类 继承抽象类的子类,是抽象类的一种具体化。
接口 实现接口的类,具有接口的一种功能。