java五分钟O(∩_∩)O哈哈~继承好坑

来源:互联网 发布:windows xp系统还原 编辑:程序博客网 时间:2024/06/07 06:45

java中我们可以利用继承来基于已存在的类构造一个新类,很多人知道java中的继承便是关键字extends,语法结构大概就是:
public class * extends *
但是,其中的一些微小的细节你是否也同样心如明镜呢?试试便知了O(∩_∩)O哈哈~
首先,我贴上要讲解的类的代码以及包的结构(听起来很高端,其实就是包里面有什么东西而已):
这里写图片描述

com.example.exclass.Employee.java:

package com.example.exclass;public class Employee {    private String name;    private double salary;    public Employee(String name, double salary){        this.name = name;        this.salary = salary;    }    public Employee(){        /*         *          */    }    public String getName(){        return name;    }    public double getSalary(){        return salary;    }}

com.example.exclass.Manager.java

package com.example.exclass;public class Manager extends Employee{    private double bonus;    public Manager(String name,double salary, double bonus){        super(name, salary); //使用super调用构造器的语句必须是子类构造器的第一条语句        /*         * 如果子类的构造器没有显示地调用超类的构造器,则将自动调用超类默认(没有参数)         * 的构造器。如果超类没有不带参数的构造器,并且在子类的构造器又没有显式地调用         * 超类的其他构造器,则 java 编译器将报告错误         */        this.bonus = bonus;    }    public double getSalary(){        return bonus + super.getSalary(); //这里如果是换成这样引用的话:        /*          * return bonus + getSalary();或者         * return bonus + salary;         * 这两种方法都是错误的,原因是:         * getSalary()方法既存在于超类(super class)Employee中,又存在于子类Manager中         * 因此直接调用的话会导致这条语句无限次调用自己,直到整个程序崩溃为止。         * 而return bonus + salary;直接调用Employee域的话也是错误的,         * 虽然Manager继承了Employee,         * 但由于salary域是私有的,private的,所以除了本类之外其他类都不能调用         * 所以我们有必要在Employee中写一个public方法来得到salary         */    }}

com.example.exclass.Main.java

package com.example.exclass;/* * @author Yi_Yuan_n * @2015.10.25 * 这个程序的主要目的是为了描述 * java中关于继承涉及到的某些知识点 */public class Main {    public static void main(String[] args){        String name = null;        double salary;        double bonus;        name = "Yi_Yuan_n";        salary = 10000;        bonus = 2000;        Manager manager = new Manager(name, salary, bonus);        System.out.println(manager.getName() + "'s sum is " + manager.getSalary());        Employee employee = new Manager(name, salary, bonus);        System.out.println(manager.getName() + "'s sum is " + employee.getSalary());        Employee employee02 = new Employee(name, salary);        System.out.println(manager.getName() + "'s sum is " + employee02.getSalary());    }}

运行结果如下:

这里写图片描述

0 0
原创粉丝点击