抽象类与抽象方法
抽象方法:由系统关键字abstract修饰的方法,叫抽象方法
抽象方法的特点:
1.抽象方法的实现没有
2.会强制抽象方法所在的类的子类去重写该方法
3.一定只能在抽象方法中
抽象类:由系统关键字abstract修饰的类叫做抽象类
抽象类的特点:
1.抽象类不能实例化对象
2.抽象类的子类一定要重写抽象类中的抽象方法
3.抽象类中可以有成员变量和成员方法,既可以有抽象方法,也可以没有,抽象方法中一定有构造方法的
抽象类是根据多态来用其子类创建对象的
abstract class People //抽象类
{
String name; //成员变量
public void sayHi() //成员方法
{
System.out.println("我叫"+name);
}
public abstract void eat(); //抽象方法,没有方法的实现
}
class Student extends People
{
@Override //抽象方法的重写
public void eat() {
System.out.println("吃食堂饭");
}
}
一般,当我们会把一些无法实现的方法,写成抽象方法放入抽象类中,让其子类来实现.
例如人吃什么饭,这个问题我们不好写实现,就定义为抽象问题,但是其子类学生吃什么饭这个问题就可以实现.
下面关于抽象类和抽象方法,我们思考一下,抽象关键词abstract和哪一些关键字不能一起出现,原因是什么?
1.首先是关键字final:因为抽象方法是没有实现的,会强制子类重写方法,但是final修饰的方法是无法重写的
2.关键字private,这是一个权限修饰符,因为private修饰的方法外界是无法访问的,因此子类是无法对其进行重写的.
3.关键字static,因为static修饰的方法,是可以直接用方法名调用的,但是抽象方法没有方法的实现,是不能调用的.
接口
接口是由关键字interface修饰的叫做接口
接口的特点:
1.接口不能实例化一个对象,谁用接口就要去实现接口中的方法
2.接口中只能有抽象方法,不能有成员方法,并且接口中不能有成员变量,但是可以有常量,接口中是没有构造方法的
interface Fly//接口
{
public abstract void fly();//需求,抽象方法
}
class Bird implements Fly
{
@Override
public void fly()
{
System.out.println("我能飞");
}
}
类,接口之间的相互关系
类与类之间的关系是继承关系,并且只能单继承或者多层继承
类与接口之间的关系是实现关系,类实现接口,并且可以一个类实现多个接口,但是类中必须要重写所有的抽象方法
接口与接口的关系
例如:
interface X1
{
public abstract void sayHi();
}
interface X2
{
public abstract void print();
}
interface X3 extends X2 //接口3继承接口2,连抽象方法也一起继承了,所以实现的时候,X2和X3的抽象方法都实现
{
public abstract void count();
}
class P implements X1 , X3
{
@Override
public void sayHi() {
System.out.println("你好");
}
@Override
public void print() {
System.out.println("打印");
}
@Override
public void count() {
System.out.println("数数");
}
}