【什么是抽象方法?什么是抽象类?】
没有方法体的方法,且用abstract修饰的为抽象方法,拥有抽象方法的则为抽象类,且必须用abstract修饰
【特点】
抽象类不能实例化,但可以通过抽象化多态创建对象
抽象类必须有子类。且子类必须重写抽象方法
抽象类也像普通类一样有构造方法(用于子类访问父类数据的初始化)
抽象类及抽象方法不可以使用final修饰(因为抽象类必须被继承,而使用final修饰的类不能被继承。抽象方法必须被重写,而使用final修饰的方法不能再被重写。)
与猫和狗的多态版对比,其实普通类能够实现的比抽象类多,甚至有时候可以起到抽象类的作用,抽象类主要是作为一种模板,一种强制的格式,其主要作为父类(强制抽象类必须有子类,且一个子类只能继承一个抽象类),也可以通过抽象类多态实例化使用。
一般更建议子类继承抽象类,而不是普通类
package 抽象类;
//动物类
public abstract class Animals {
private String name;
private int age;
//get,set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//构造方法
public Animals() {}
public Animals(String name,int age) {
this.name=name;
this.age=age;
}
//抽象 吃饭方法
public abstract void eat();
}
package 抽象类;
//猫类
public class Cat extends Animals{
//重写抽象方法
@Override
public void eat() {
// TODO 自动生成的方法存根
System.out.println("猫要吃好多好多鱼");
}
//构造方法
public Cat() {}
public Cat(String name,int age) {
super(name,age);//调用父类构造方法
}
}
package 抽象类;
//狗类
public class Dog extends Animals{
//构造方法
public Dog() {}
public Dog(String name,int age) {
super(name,age);
}
//重写eat方法
public void eat() {
System.out.println("狗要吃好多好多骨头");
}
}
package 抽象类;
//测试类
public class test {
public static void main(String[] args){
Animals a=new Cat();
a.eat();
a.setName("huahu");
System.out.println(a.getName());
System.out.println("--------------------");
a=new Cat("name",11);
System.out.println(a.getName()+","+a.getAge());
}
}