Java基础篇之abstract
2021-04-11 11:26
标签:无法 cat 特点 代码 变量 xtend eth dem new 1.抽象abstract类的特点: a.抽象类或抽象方法必须用abstract关键字修饰 b.抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类 c.抽象类不能被实例化,因为它不是具体的,抽象类有构造方法,但是不能实例化,抽象类的构造方法是提供给抽象类的子类访问父类数据初始化 2.抽象类的子类: a.若子类是抽象类,与上一致 b.若子类不是抽象类,是具体类,就要(强制)重写父类中的抽象方法,即抽象类的实例化是依靠具体的子类来实现的 3.抽象类的成员特点: a.成员变量:可以是变量,也可以是常量 b.构造方法:有,带不带参的构造方法都可以有 c.成员方法:既可以是抽象方法,也可以是非抽象的 抽象类的成员方法如果是抽象方法,则不允许该抽象方法有方法体,表示需要子类来继承,强制子类来做的事 抽象类的成员方法如果是非抽象方法,则表示子类继承的事情,提高代码的复用性 4.关于abstract的几个非法修饰符: final/private+abstract:很明显abstract类是需要被继承来实现功能的,private修饰子类继承不到,final修饰无法被继承 static+abstract:无意义,用abstract修饰的方法没有方法体,用static修饰的静态方法可以通过类名.的方式直接调用,而调用一个没有方法体的方法没有意义 5.代码演示: Java基础篇之abstract 标签:无法 cat 特点 代码 变量 xtend eth dem new 原文地址:https://www.cnblogs.com/sumilemei/p/13359890.htmlabstract class Animal{
public int num=10;
public final double PI=3.14;
public Animal(){
System.out.println("抽象父类的构造方法");
}
public Animal(int num){this.num=num;}
public abstract void show();
public int getNum(){
return num;
}
public void setNum(int num){
this.num=num;
}
public void method(){
System.out.println("我是抽象类中的普通方法,可以有方法体");
}
}
class Dog extends Animal{
int num=20;
public Dog(){
System.out.println("dog子类的构造方法");
}
public void show(){
System.out.println("我是普通类,继承了抽象类,所以一定要重写抽象父类的抽象方法,因为抽象父类中的抽象方法表示要强制子类做的事");
}
public void bark(){
System.out.println("我是动物,也是狗,我可以看门,会吠");
}
public void method(){
System.out.println("可以重写抽象父类中的方法");
}
}
abstract class Cat extends Animal{
public void show(){
System.out.println("我们一起喵喵喵");
}
}
class AbstractDemo {
public static void main(String[] args) {
//Animal a=new Cat();报错,因为Cat类也是抽象类,也是不允许这样实例化的
Animal a=new Dog();
a.method();
a.show();
//a.bark();多态的弊端,可以通过向下转型
Dog d= (Dog) a;
d.bark();
//Cat c= (Cat) a;
//c.method();
//c.show();
}
}
下一篇:线程的状态