• OOP⑹


    1.抽象类

    所有由abstract关键字修饰的方法我们称之为  抽象方法!
    抽象方法只能存在于 抽象类中!
    
     所有由abstract关键字修饰的类我们称之为  抽象类!
     
     抽象类的特点:
     01.由abstract关键字修饰
     02.类中可以有抽象方法也可以有普通方法
     03.子类必须重写父类的所有抽象方法,除非子类也是抽象类!
     04.抽象类不能实例化!但是可以有构造方法!
     
     
     final:
     
     01.如果一个属性值不希望被修改   在属性前加final
     02.如果一个方法不希望被重写   在方法上加 final
     03.如果一个类不希望被继承   在类上加final
     1 /**
     2  * 所有动物的父类
     3  */
     4 public abstract class Animal {
     5 
     6     /**
     7      * 定义所有动物共有属性
     8      */
     9     private int age; // 年龄
    10     private String name; // 姓名
    11 
    12     /**
    13      *  所有动物公共的行为
    14      *  01.如果不在子类中重写这个eat方法!那么所有的动物吃东西都执行这一个方法!
    15      *      显然这种方式不可行! 怎么办?  子类重写eat()!
    16      *  02.重写方法之后,得到了我们想要的结果! 每个动物吃饭的方法都不一样!
    17      *      我们又发现了一个问题! 父类的这个eat()中的输出语句 有意义???
    18      *      这个输入语句会得到执行吗??    只要我们重写 这个eat不可能执行!
    19      *    那么我们就删除这句话!方法体就没了!{}也删除
    20      *    报错了??为什么报错!
    21      *      001.加方法体,刚删除,这种方式不可行!
    22      *      002.在方法声明时,加入abstract关键字!  可行!
    23      *      
    24      *        所有由abstract关键字修饰的方法我们称之为  抽象方法!
    25      *         抽象方法只能存在于 抽象类中!
    26      *        
    27      *     又报错了??
    28      *      001.删除abstract关键字 ! 不可行!
    29      *      002.在类上加入abstract关键字 
    30      *        
    31      *        所有由abstract关键字修饰的类我们称之为  抽象类!
    32      *  
    33      */
    34     public abstract void eat();
    35 
    36     public int getAge() {
    37         return age;
    38     }
    39 
    40     public void setAge(int age) {
    41         this.age = age;
    42     }
    43 
    44     public String getName() {
    45         return name;
    46     }
    47 
    48     public void setName(String name) {
    49         this.name = name;
    50     }
    51 
    52     public Animal() {
    53         super();
    54     }
    55 
    56     public Animal(int age, String name) {
    57         super();
    58         this.age = age;
    59         this.name = name;
    60     }
    61 
    62     @Override
    63     public String toString() {
    64         return "Animal [age=" + age + ", name=" + name + "]";
    65     }
    66 
    67 }
    抽象方法和抽象类
    
    
     1 /**
     2  * 因为cat不是抽象类,所以必须实现父类中所有的抽象方法
     3  */
     4 public class Cat extends Animal {
     5 
     6     @Override
     7     public void eat() {
     8         System.out.println("小猫咪在吃鱼!");
     9     }
    10 
    11 }
    抽象方法和抽象类
    1 /**
    2  *   因为dog是抽象类 所以不需要 重写animal的抽象方法,也可以重写
    3  */
    4 public abstract class Dog extends Animal {
    5 
    6 }
    抽象方法和抽象类
     1 public class AnimalTest {
     2 
     3     public static void main(String[] args) {
     4         // 创建小狗和小猫咪的实例
     5         // Dog dog = new Dog(); 抽象类 不允许实例化
     6         // 调用小狗吃东西的方法
     7         // dog.eat();
     8 
     9         Cat cat = new Cat();
    10         // 调用小猫咪吃东西的方法
    11         cat.eat();
    12 
    13     }
    14 }
    抽象方法和抽象类
     
  • 相关阅读:
    读取数据变JSON传值!
    YII2.0多条件查询升级版
    JS跳转页面方法
    yii的简单片段缓存
    我读过的最好的epoll讲解--转自”知乎“
    I/O多路复用详解
    ”open-close"prinple (OCP)
    获取本机的IPv4或者v6地址
    .Net 下未捕获异常的处理
    TCP断开连接的过程
  • 原文地址:https://www.cnblogs.com/wwlw/p/7424165.html
Copyright © 2020-2023  润新知