随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征。有时将一个父类设计得非常抽象,以至于它没有具体的实例,这样的类叫做抽象类。
1.abstract :抽象的
2.abstract 可以用来修饰的结构 : 类,方法
3.abstract 修饰类、抽象类
4.abstract修饰方法,抽象方法
1.abstract不能用来修饰:属性、构造器等结构
2.abstract 不能用来修饰私有方法、静态方法、 final 的方法、 final 的类
package Abstract;
public class AnimalDemo {
public static void main(String[] args) {
// 抽象类不能创建对象
// Animal a = new Animal();
Animal a = new Cat(25);
a.eat();
a.sleep();
a.getAge();
}
}
// 抽象类
abstract class Animal {
private int age = 20;
public Animal(){}
public Animal(int age){
this.age=age;
}
public void getAge(){
System.out.println(this.age);
}
// 抽象方法
public abstract void eat();
public void sleep(){
System.out.println("睡觉");
}
}
class Cat extends Animal{
public Cat(int age){
super(age);
}
// 重写抽象方法
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
抽象类不能实例化,但可借助抽象类来创建抽象类的匿名子类的对象
package Abstract;
public class AnimalDemo {
public static void main(String[] args) {
method(new Cat(5)); //这个叫匿名对象
//抽象类不能实例化,但可借助抽象类来创建抽象类的匿名子类的对象
Animal a = new Animal() {
@Override
public void eat() {
System.out.println("猫跟喜欢吃老鼠!");
}
};
a.eat();
}
public static void method(Animal p){
p.eat();
}
}
abstract class Animal {
private int age = 20;
public Animal(){}
public Animal(int age){
this.age=age;
}
public void getAge(){
System.out.println(this.age);
}
//抽象方法
public abstract void eat();
public void sleep(){
System.out.println("睡觉");
}
}
class Cat extends Animal{
public Cat(int age){
super(age);
}
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
如果你觉得博主写的还不错的话,可以关注一下当前专栏,博主会更完这个系列的哦!也欢迎订阅博主的其他好的专栏。
🏰系列专栏
👉软磨 css
👉硬泡 javascript
👉flask框架快速入门