• 1-3-2-抽象类


     父类的抽象方法就像图形计算面积的方法,是没有办法计算的,需要子类来计算抽象方法,就像正方形是可以计算面积的一样

    子类既是父类也是子类,就像汪星人就是汪星人,汪星人就是汪星人的父类,汪星人也是动物的子类一样

    抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束
    抽象类:抽象方法所在的类必须是抽象类,在class前直接写上abstract即可,抽象类里可以有非抽象方法
    //抽象类
    public abstract class Animal {
        //抽象方法
        public abstract void eat();
        public abstract void drink();
    
        //普通的成员方法
        public void normalMethod(){
    
        }
    }
    
    
    
     
    
    
    如何使用抽象类和抽象方法:
    1.不能直接创建new抽象类对象
    public class DemoMain {
        public static void main(String[] args) {
            Animal animal = new Animal();//错误写法
        }
    }

    2.必须用一个子类来继承抽象父类
    3.子类必须覆盖重写父类当中所有抽象方法
    public class Cat extends Animal {
        @Override
        public void eat() {
            System.out.println("猫吃鱼");
        }
    
        @Override
        public void drink() {
            System.out.println("猫喝水");
        }
    }

    4.虽然方法是父类创建的抽象方法,但是是子类对象进行使用
    public class DemoMain {
        public static void main(String[] args) {
    //        Animal animal = new Animal();//错误写法
            Cat cat = new Cat();//子类创建对象进行使用而不是父类创建
            cat.eat();
            cat.drink();
        }
    }
    
    
    

    1.第一个注意事项就是上面第4条的用法

    2.

    父类

    public abstract class Fu {
        //构造器
        public Fu(){
            System.out.println("父类构造器启动");
        }
        //抽象方法
        public abstract void eat();
    }

    子类

    public class Zi extends Fu {
        //子类构造器
    
        public Zi(){
            //构造器启动前会有一个隐藏的super()去调用父类的构造器
            //super();
            System.out.println("子类构造器启动");
        }
    
        //父类抽象方法
        @Override
        public void eat() {
            System.out.println("吃东西");
        }
    }

    启动类

    public class DemoMain {
        public static void main(String[] args) {
            Zi zi = new Zi();
            zi.eat();
        }
    }

    运行结果

    3.抽象方法所在的类必须是抽象类,在class前直接写上abstract即可,抽象类里可以有非抽象方法,也可以没有抽象方法
    //这样没有抽象方法的抽象类,也不能直接创建对象,在一些特殊场景下有用(适配器模式)
    public abstract class MyAbstract {
    
    }
    
    
    4.子类必须覆盖重写父类当中所有抽象方法,除非你的子类也是抽象类,否则就会编译不通过报错

    抽象父类Animal
    //父类
    public abstract class Animal {
        public abstract void sleep();
        public abstract void eat();
    }
    
    

    抽象子类Dog

    //子类
    public abstract class Dog extends Animal {
        @Override
        public void eat() {
            System.out.println("狗吃饭");
        }
        //这里隐藏了Animal中的public abstract void sleep();方法,Dog方法的子类可以重写该方法
    }

    Dog子类Dog2Ha

    public class Dog2Ha extends Dog {
        @Override
        public void sleep() {
            System.out.println("二哈睡觉");
        }
    }

    Dog子类DogGold

    //Dog类的子类
    public class DogGold extends Dog{
        //这里只有重写sleep方法,因为eat方法在Dog被重写过了
        @Override
        public void sleep() {
            System.out.println("金毛睡觉");
        }
    }

    启动类

    public class DemoMain2 {
        public static void main(String[] args) {
    //        Animal animal = new Animal();//这是抽象类,错误的
    //        Dog dog = new Dog();//这也是错误的,这也是抽象类
            Dog2Ha dog2Ha = new Dog2Ha();
            dog2Ha.eat();
            dog2Ha.sleep();
            System.out.println("================");
            DogGold dogGold = new DogGold();
            dogGold.eat();
            dogGold.sleep();
        }
    }
    结果
     


  • 相关阅读:
    Beta阶段冲刺---Day1
    网络15软工个人作业5——软件工程总结
    软工网络15个人作业4——alpha阶段个人总结
    软件工程个人作业3——集大通APP案例分析
    软件工程网络15结对编程作业
    软件工程网络15个人阅读作业2-提出问题
    软工网络15个人阅读作业1
    Java课程设计—学生成绩管理系统(201521123002 林楚虹)
    201521123002《Java程序设计》第14周学习总结
    201521123002 《Java程序设计》第13周学习总结
  • 原文地址:https://www.cnblogs.com/KeepCalmAndNeverSayNever/p/12506836.html
Copyright © 2020-2023  润新知