• 抽象方法和抽象类


    1.抽象类
    抽象类的目的是标志处某些类不能被初始化出来,只能被继承和产生多态,例如Animal是动物类,没有初始化的必要,动物是什么?什么动物?。通过关键字abstract关键字标识抽象类。
    1.编译器不会初始化抽象类,语法不通过。抽象类代表不能有实例化对象,但是还是可以用来声明引用类型给多态使用,却不用创建对象。
    2.抽象类除了被继承过之外,是没有用途的、没有价值、没有目的的
    3.抽象的方法
    1.抽象的类代表此类一定要被继承,抽象的方法标识此方法一定要被覆盖(重写),例如Animal类,里面写一个抽象的eat()方法,不写方法体,只能在子类里面用来重写。
    2.如果声明一个抽象方法,那么那个类也必须是抽象的。但是抽象类中可以含有具体不抽象的方法。
    3.具体类必须实现所有的抽象类的方法。当然可以通过标记为abstract转移给继承树的下一个实现。
    4.为什么要有抽象的方法?这样没有公用代码
    当没有办法在父类给出共有的的有意义的代码,抽象方法的意思是就算无法实现出方法的内容,但是还是可以定义出一组子类共同的协议(保证了子类中共有某一些方法)
     
    5.抽象方法的好处是?
    多态,目标是使用父类的类型作为方法的参数、返回类型或者数组的标志。通过这个机制,可以在在加入新的子类到程序中,却不用重写或者修改处理这些类型的程序。例如Animal是父类,有几十个子类,有一个带参数的方法,如果使用多态的话,定义方法的时候直接传入父类的引用,调用的时候传入子类对象就可以了。如果没有多态,那需要写几十个方法,分别传入每一个子类的对象。
     1 public abstract class Person {
     2     public  abstract void eat();
     3     public abstract void print();
     4 }
     5 class man extends Person{
     6     public void eat() {
     7         System.out.println("man");
     8     }
     9     public void print() {
    10         System.out.println("man");
    11     }
    12     public void solo() {
    13         System.out.println("男人");
    14     }
    15 }
    16 class woman extends Person{
    17     public void eat() {
    18         System.out.println("woman");
    19     }
    20     public void print() {
    21         System.out.println("man");
    22     }
    23     public void show() {
    24         System.out.println("女人");
    25     }
    26 }
    27 
    28 public class PersonText {
    29     public static void main(String[] args) {
    30         personManner per=new personManner();
    31         man ma=new man();
    32         woman wo=new woman();
    33         per.peek(ma);
    34         per.peek(wo);
    35     }
    36 }
    37 class personManner{
    38     public void peek(Person pe) {
    39         if (pe instanceof man) {
    40             ((man) pe).solo();
    41         }
    42         if (pe instanceof woman) {
    43             ((woman)pe).show();
    44         }
    45         pe.eat();
    46         pe.print();
    47     }
    48 }
    6.注意要点
    抽象类:通过abstract修饰类(与final不能够同时出现)
    特点:1.抽象类不能被实例化
    2.抽象类中可以有构造器(构造器是为了给子类用,子类的构造方法会用到)
    3.抽象类可以出现抽象方法,也可以出现非抽象方法
    4.抽象类有构造器,但是不能被实例化//契合面向对象的思想,抽象类没有实际对象所以不能实例化。
    5.抽象类中的具体方法可以通过子类的继承关系,用子类对象调用,或者将抽象类中具体的方法用static修饰,然后可以直接用类名调用
     
     
    抽象方法:通过abstract修饰的方法
    特点:1.抽象方法不能有方法体
    2.抽象方法必须被子类重写(除非子类的方法也是抽象方法)
    3.抽象方法不能用private修饰,因为抽象方法就是用来被继承的,如果被private修饰就不能被子类继承了
    4.抽象方法也不能用static修饰,因为抽象方法没有方法体,没有实际意义,调用就没有意义,如果用static修饰,虽然抽象类不能实例化对象,但是用static修饰之后可以直接用类名调用。
  • 相关阅读:
    质因数分解
    P1939 【模板】矩阵加速(数列)
    UVALive
    Python操作MySQL:pymysql模块
    Mysql数据库基础
    Redis管道和发布订阅
    Redis常用操作
    Redis操作集合,有序集合
    Redis操作list
    Redis操作hash
  • 原文地址:https://www.cnblogs.com/had1314/p/11373837.html
Copyright © 2020-2023  润新知