665 字
3 分钟
Java:抽象类
目录
在Java中,所有的对象都是类描绘的,但是不是所有的类都是用来描绘对象的。
在我们之前的代码中,Dog类继承Animal类,但我们知道Animal是一个抽象的概念,而不是具体的对象,因此有些时候我们只是需要表达动物之间的共性的时候,我们就可以把Animal这个抽象的概念写成抽象类。
抽象类除了不能实例化以外,其他的成员变量,方法函数和构造方法都和普通的类一样。因为不能被实例化,因此抽象类只能被继承后才能使用。
一、抽象类
抽象类用abstract修饰符表示,实例如下:
public abstract class Animal { private String name; private int age; private double weight;
public Animal(String name, int age, double weight) { System.out.println("Constructing class Animal"); this.name = name; this.age = age; this.weight = weight; }
@Override public String toString() { return "Animal{" + "name='" + name + '\'' + ", age=" + age + ", weight=" + weight + '}'; }
public void getName() { System.out.println("Name is " + name); }}可以发现抽象类也有3个成员变量,1个构造方法,2个成员方法,跟普通的类一样。
但是我们能看到在下面的代码中看到抽象类是无法实例化的:
public class TestDemo { public static void main(String[] args) { Animal animal = new Animal("mimi", 12, 12);//编译不通过 }
}二、继承抽象类
我们可以通过一般的方法继承Animal类:
public class Cat extends Animal{
public Cat(String name, int age, double weight) { super(name, age, weight); System.out.println("Constructing class Cat"); }
public void mailCheck() { System.out.println("Within mailCheck of Cat class "); System.out.println("Mailing check to " + getName() + " with weight " + getWeight()); }}我们可以通过实例化继承了抽象类的子类,并通过子类的向上转型调用父类的方法。
public class TestDemo { public static void main(String[] args) { Cat cat = new Cat("mimi", 12, 12); Animal animal = new Cat("gugu", 2, 3);
System.out.println("Call MailCheck in class Cat"); cat.mailCheck();
System.out.println("Call MailCheck in class Animal"); animal.mailCheck();
}
}三、抽象方法
abstract修饰符也可以用于定义成员方法,当声明成员方法的时候,我们并不会进行方法的具体实现,而是把具体实现交给子类解决。
抽象方法有以下两个规则:
1.如果一个类包含抽象方法,则这个类一定是抽象类 2.继承抽象类的子类必须重写抽象类中所有的抽象方法,否则声明自身也为抽象类。
抽象方法没有定义,方法名后面直接接分号,没有花括号。
public abstract class Animal {
public abstract void eat();}下一篇真的讲接口了。
部分信息可能已经过时











