• java基础---21. 抽象


    1 抽象的概念

    2 抽象方法和抽象类的定义格式

    定义一个Animal类

    /*
    抽象方法:就是加上abstract关键字,然后去掉大括号直接分号结束
    抽象类:抽象方法所在的类必须是抽象类才行。在class之前写上abstract即可
     */
    public abstract class Animal{
        //这是一个抽象方法,代表吃东西,但是具体吃什么(大括号的内容)不确定。
        public abstract void eat();
    
        //这是普通的成员方法
        public void normalMethod(){
            
        }
    }
    

    3 抽象方法和抽象类的使用

    • 创建Animal类
    /*
    抽象方法:就是加上abstract关键字,然后去掉大括号直接分号结束
    抽象类:抽象方法所在的类必须是抽象类才行。在class之前写上abstract即可
    
    如何使用抽象类和抽象方法:
    1. 不能直接创建new抽象对象
    2. 必须用一个子类来继承抽象父类
    3. 子类必须覆盖重写抽象父类当中所有的抽象方法:
    覆盖重写(实现):子类去掉抽象方法的abstract关键字,补上方法体和大括号
    4. 创建子类对象进行使用
     */
    public abstract class Animal{
        //这是一个抽象方法,代表吃东西,但是具体吃什么(大括号的内容)不确定。
        public abstract void eat();
    
    }
    
    • 创建Animal的子类Cat
    public class Cat extends Animal {
        @Override//1.
        public  void eat() {//2.
            System.out.println("猫吃鱼");
        }
    }
    
    • 调用
    public class DemoMain {
        public static void main(String[] args) {
            //Animal animal = new Animal();错误写法,不能直接创建new抽象对象
            //4.
            Cat cat = new Cat();
            cat.eat();//猫吃鱼
        }
    }
    
    

    4 抽象方法和抽象类的注意事项

    对注意事项2的理解
    • 父类
    public  abstract class Fu {
        //构造方法
        public Fu(){
            System.out.println("抽象父类的构造方法执行");
        }
        //抽象方法
        public abstract void eat();
    }
    
    • 子类
    public class Zi extends Fu {
        //构造方法
        public Zi(){
            //默认赠送一个super
            System.out.println("子类构造方法");
        }
        //覆盖父类抽象方法
        @Override
        public void eat() {
            System.out.println("吃饭饭");
        }
    }
    
    • 调用
    /*
    对注意事项2的理解:
    类的构造方法是在创建对象(new)的时候执行的
    虽然父类也有构造方法,但是由于父类是抽象类,所以父类Animal不可以创建对象(new),
    因此构造方法若想执行必须要通过子类Cat的构造方法中的super来执行
     */
    public class DemoMain {
        public static void main(String[] args) {
            Zi zi = new Zi();
            zi.eat();
    //        抽象父类的构造方法执行
    //        子类构造方法
    //        吃饭饭
        }
    }
    
    注意事项3的理解
    /*
    一个抽象类不一定含有抽象方法,
    只要保证抽象方法所在的类是抽象的即可。
    
    这样没有抽象方法的抽象类,也不能直接创建对象,在一些特殊的常景下有用
     */
    public abstract class MyAbstract {
    }
    
    注意事项4的理解
    • 父类
    //最高的抽象父类
    public abstract class Animal {
        public abstract void eat();
        public abstract void sleep();
    }
    
    • 子类
    public abstract class Dog extends Animal{
        @Override
        public void eat(){
            System.out.println("狗吃骨头");
        }
        //到目前为止依然报错,原因:这里默认继承了父亲的
        //public abstract void sleep();这依然是一个抽象方法
        //抽象方法所在的类必须为抽象类,所以若想不报错则要让子类变成抽象类,添加abstract
    }
    
    • 子子类
    public class DogGolden extends Dog {
        @Override
        public void sleep() {
            System.out.println("呼呼呼...");
        }
    }
    
    public class Dog2H extends Dog {
        @Override
        public void sleep() {
            System.out.println("嘿嘿嘿...");
        }
    }
    
    
    • 调用
    public class DemoMain {
        public static void main(String[] args) {
    //        Animal animal = new Animal();
    //        Dog dog = new Dog();
            Dog2H dog2H = new Dog2H();
            dog2H.eat();
            dog2H.sleep();
    
            DogGolden dogGolden = new DogGolden();
            dogGolden.eat();
            dogGolden.sleep();
        }
    }
    
  • 相关阅读:
    [AHOI2006]文本编辑器 Splay tree区间操作
    HDU-3487 Play with Chain Splay tee区间反转,移动
    HDU-4619 Warm up 2 二分匹配
    HDU-4618 Palindrome Sub-Array 暴力枚举
    HDU-4616 Game 树形DP
    HDU-4614 Vases and Flowers 线段树区间更新
    HDU-4612 Warm up 边双连通分量+缩点+最长链
    HDU-4611 Balls Rearrangement 循环节,模拟
    HDU-4605 Magic Ball Game 树状数组+离散+dfs
    HDU-3436 Queue-jumpers 树状数组 | Splay tree删除,移动
  • 原文地址:https://www.cnblogs.com/deer-cen/p/12236315.html
Copyright © 2020-2023  润新知