• Java:抽象类笔记


    抽象类:类中没有包含足够的信息来描绘一个具体的对象。

    为什么要创建抽象类?

    为了更好的继承,以后能更好的扩展,减少类与类之间的耦合。

    什么时候需要创建一个抽象类?

    (简单粗暴的理解)某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现, 那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类。

    tips: 1. 构造方法,类方法(用static修饰的方法)不能声明为抽象方法。如何理解?

            2.抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。

    如何创建抽象类?

    就像写文章先建立大纲一样:创建3个java文件。

    1. 父类 - 抽象类: Employee.java 文件。

    2. 子类 - 继承抽象类: Salary.java 文件。

    3. 实例化子类: SalaryList.java 文件。

    再根据大纲填充内容。

    首先来填充抽象类的内容。

    抽象类可以声明变量、成员方法、和构造方法。

    public abstract class Employee {
        private String name;
        private String address;
        private int number;
        public Employee(String name, String address, int number){
            this.name = name;
            this.address =address;
            this.number = number;
        }
        public double computePay(){
            return 0.0;
        }
        public void mailCheck(){
            System.out.println("Mailing a check to " + this.name + " " + this.address);
        }
        public String toString(){ 
            return name + " " + address + " " + number;
        }
        public void setAddress(String newAddress){
            address = newAddress;
        }
        public String getName(){
            return name;
        }
        public String getAddress(){
            return address;
        }
        public int getNumber(){
            return number;
        }
    
    }

    再来看子类如何继承:

      任何子类必须重写父类的抽象方法,或者声明自身为抽象类

    public class Salary extends Employee {
        private double salary;
        public Salary(String name, String address, int number, double salary){
            super(name, address, number);
            setSalary(salary);
        }
        public void mailCheck(){
            System.out.println("Within mailCheck of Salary class");
            System.out.println("Mailing check to " + getName() + " with salary " + salary);
        }
        public double getSalary(){
            return salary;
        }
        public void setSalary(double newSalary){
            if(newSalary >= 0.0){
                salary = newSalary;
            }
        }
    
    //    @Override  伪代码,表示重写(不写也可以),写上的好处:
        //可以当注释用,方便阅读;编译器可以帮你检查方法的方法名是否父类中所有的,如果没有则报错
        //如果你不加@Override,则编译器将不会检测出拼写错误,而是会认为你为子类定义了一个新方法:
        public double computePay() {
    //        return super.computePay();
            System.out.println("Computing salary pay for " + getName());
            return salary/52;
        }
    }

    最后实例化:

      继承了抽象类Employee的子类Salary的实例化

    public class AbstractDemo { //继承了抽象类Employee的子类Salary的实例化
        public static void main(String [] args){
            Salary s = new Salary("aaa", "Beijing", 2, 5.0);
            Employee e = new Salary("bbb", "Beijing", 3, 6.0);
            s.mailCheck();
            e.mailCheck();
        }
    }
  • 相关阅读:
    PEP20: The Zen of Python
    画三角形
    前端优化总结
    Doctype的作用以及严格模式和混杂模式的区别
    JS循环添加事件
    数据库整理用到的
    ASP.NET中url路径中?和= 被转码成%3f 和 %3d带来的问题。
    ReSharper Abbreviations List, 怎么管理缩写列表
    怎样使用 ASP.NET Optimization Bundling压缩样式表和脚本
    jQuery 选择同时包含两个class的元素
  • 原文地址:https://www.cnblogs.com/dodocie/p/7447437.html
Copyright © 2020-2023  润新知