抽象类和接口
抽象类:
什么是抽象类: 抽象类就是指在类中去定义方法,但是不去实现它,由继承它的子类去实现,简单来说就是拥有抽象函数的类称作抽象类。
什么是抽象函数 从代码上来说就是只有方法的生命,没有实现,从现实生活中来说,当我们发现了某一类事物具有相同的行为,但是他们执行行为的方式又各不相同,在此情况下,我们对方法进行抽取,只保留方法的声明不去实现,而是由他们的子类去实现。
注意 抽象类不一定包涵抽象函数。继承抽象类的子类要么实现父类的抽象函数或者继续声明下去,让自己的子类去实现。
//定义一个抽象类动物
abstract class Living{
public abstract void eat();
}
class Dog extends Living{
//实现了父类中的方法
public void eat(){
System.out.println("狗吃骨头");
}
}
class Cat extends Living{
//实现了父类中的方法
public void eat(){
System.out.println("猫吃鱼");
}
}
1.抽象类是否由构造方法:
有的,抽象类的子类要创建对象的话,必须要调用父类的构造方法,如果父类没有构造方法的话,那么子类将无法访问,无法创建对象。抽象类的构造方法只能是protected。
2.抽象类是否可以去创建对象:
不可以,抽象类只有对方法的声明,没有对方法具体的实现,
3.抽象类和一般类的区别:
抽象类与一般类的唯一区别,就在于抽象类具有抽象函数。
4.抽象函数不能和那些关键字连用:
final,private,static
因为,当final修饰类的话,表示该类不能被继承,修饰函数的话表明该函数不能被重写。
private的话,因为是私有的,所以抽象函数一旦私有了之后,就不能被继承,就不能进行对函数的重写。
static本来就不存在重写,static必须是一个具体的事务。
接口
什么是接口: 接口在许多方面都与抽象类很相似,但是它的目的是指明相关或者不相关类的多个对象的共同行为。从代码上来说一个抽象类中全部都是抽象函数的类可以定义为接口。
接口的定义:
interface A{
public static final int num=10;
void show();
}
类与类之间只能单继承,而接口可以多继承。接口和接口之间也可以多继承。
接口和抽象类的区别
1.从变量上来说:
接口:所有的变量必须是 public static final
抽象类:没有限制
2.从构造方法上来说:
接口:没有构造方法,不能创建对象。
抽象类:有构造方法,子类通过构造方法调用构造方法,不能创建对象。
3.从方法上来说:
接口:只能定义为公共的抽象实例方法
抽象类:无限制。
一个简单的抽象类:
interface A{
void showA();
void show();
}
interface B{
void showB();
void show();
}
interface C extends A,B{
void showC();
void show();
}
class Demo implements C{
public void showA(){}
public void showB(){}
public void showC(){}
public void show(){
}