首页 > 编程学习 > 【 java 面向对象】抽象类与抽象方法

【 java 面向对象】抽象类与抽象方法

发布时间:2022/10/1 7:44:19

请添加图片描述

目录

  • 前言
    • abstract的使用
      • abstract 修饰类
      • abstract 修饰方法
      • abstract 的使用注意点
    • 代码
    • 抽象类的匿名子类
  • 结语

前言

随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征。有时将一个父类设计得非常抽象,以至于它没有具体的实例,这样的类叫做抽象类。

abstract的使用

1.abstract :抽象的
2.abstract 可以用来修饰的结构 : 类,方法

abstract 修饰类

3.abstract 修饰类、抽象类

  • 此类不能实例化。
  • 抽象类中一定有构造器,便于子类实例化时调用(涉及,子类对象实例化的全过程)
  • 开发中,都会提供抽象类的子类,让子类对象实例化,完成相关的操作。

abstract 修饰方法

4.abstract修饰方法,抽象方法

  • 抽象方法只有方法的声明,投有方法体
  • 包含抽象方法的类,一定是一个抽象类,反之,抽象类中可以没有抽象方法的。
  • 若子类重写了父类中的所有的抽象方法后,此子类方可实例化。
  • 若子类投有重写父类中的所有的抽象方法,则此子类也是一个抽象类,需要用abstract修饰。

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框架快速入门

Copyright © 2010-2022 mfbz.cn 版权所有 |关于我们| 联系方式|豫ICP备15888888号