Home

韧桂

思考,总结

面向对象的特征二继承性及方法的重写

代码一

package eight;

public class Worker extends Person{
    public void eat(){
        System.out.println("工人吃饭");
    }
//    private String name;
//    private int age;
//
//    public String getName(){
//        return name;
//    }
//    public void setName(String name){
//        this.name = name;
//    }
//    public int getAge(){
//        return age;
//    }
//    public void setAge(int age){
//        this.age = age;
//    }
//    public void eat(){
//        System.out.println("吃饭");
//    }
//    public void walk(){
//        System.out.println("走路");
//    }

}

代码二

package eight;

/**
 * super:可以用来修饰属性、方法、构造器
 *
 *  1)当子类与父类中有同名的属性时,可以通过「super.此属性」显式的调用父类中声明的属性。
 *  若想调用子类的同名的属性「this.此属性」
 *  2)当子类重写父类的方法以后,在子类中若想再显式的调用父类的被重写的方法,就需要使用「super.方法」
 *  3)super 修饰构造器,通过在子类中使用「super(形参列表)」来显式的调用父类中指定的构造器。
 *      >在构造器内部,「super(形参列表)」必须要声明在首行。
 *      >在构造器内部,「this(形参列表)」或「super(形参列表)」只能出现一个。
 *      >当构造器中,不显式的调用「this(形参列表)」或「super(形参列表)」其中任何一个,默认调用的是
 *      父类空参的构造器。
 *
 *      注意:设计一个类时,尽量要提供一个空参的构造器。
 */
//class A{
//
//}

//public class Student extends Person,A{//非法
public class Student extends Person{
//    private String name;
//    private int age;
    private String schoolName;
    int id = 1002;

    public Student(){
        super();
    }
    public Student(String name,int age){
//        this.name = name;
//        this.age = age;
        this.setName(name);
        this.setAge(age);
    }

    public Student(String schoolName){
        super(16190130,180);
        this.schoolName = schoolName;
    }
    public String getSchoolName(){
        return schoolName;

    }

//    public String getName(){
//        return name;
//    }
//    public void setName(String name){
//        this.name = name;
//    }
//    public int getAge(){
//        return age;
//    }
//    public void setAge(int age){
//        this.age = age;
//    }
//    public void eat(){
//        System.out.println("吃饭");
//    }
//    public void walk(){
//        System.out.println("走路");
//    }

    //对父类同名的方法的重写、覆盖。
    public void eat(){
        System.out.println("我想喝安慕希");
    }
    public void walk(){
        System.out.println("走了十里路");
    }

    public void info(){
        eat();
        System.out.println("我是一个学生");
    }
    //不是对父类私有的 sleep()方法的重写。
    private int sleep(){
        return 0;
    }

    public void show(){
        System.out.println(this.id);
        System.out.println(super.vision);
        System.out.println(super.id);
    }
}

代码三

package eight;

/**
 * 一、面向对象的特征二:继承性
 *  1.为什么要设计继承性?
 *
 *  2.通过「class A extends B」类实现类的继承
 *      子类:A(或基类 SuperClass)  父类:B
 *
 *  3.子类继承父类以后,父类中声明的属性、方法,子类就可以获取到。
 *      明确:当父类中有私有的属性或方法时,子类同样可以获取得到,只是由于封装性的设计,
 *      使得子类不可以直接调用罢了。
 *
 *      子类除了通过继承,获取父类的结构之外,还可以定义自己的特有的成分。
 *
 *      extends:子类是对父类功能的“拓展”,明确子类不是父类的子集。
 *
 *  4.Java中类的继承性只支持单继承!一个类只能继承一个父类,反之,一个父类可以有多个子类
 *  5.子父类是相对的概念。
 *
 * 二、方法的重写:      -----修饰符 返回值类型 方法名 (参数列表){}
 *  1.前提:有子类继承父类
 *  2.子类继承父类以后,若父类的方法对子类不适用,那么子类可以对父类的方法重写(override overwrite)、覆盖、覆写。
 *  3.重写的规则:1)要求子类方法的「返回值类型 方法名 (参数列表)」与父类的方法一样。
 *             2)子类方法的修饰符不能小于父类方法的修饰符
 *             3)*若父类方法抛异常,那么子类方法抛的异常类型不能大于父类的。
 *             4)*子父类的方法必须同为 static 或同为非 static 的。
 *
 */
public class TestStudentWorker {
    public static void main(String[] args) {
        Student s = new Student();
        s.eat();


        Worker w = new Worker();
        w.eat();

        Person p = new Person();
        p.eat();

        s.setAge(13);
        s.setName("小七");
        System.out.println(s.getName() + ":" + s.getAge());

        Teacher t = new Teacher();
        t.eat();
        t.info();
        t.show();

        System.out.println();
        s.show();


        System.out.println();
        Student s1 = new Student("清华大学");
        System.out.println(s1.getName() + ":" + s1.getAge() + "," + s1.getSchoolName());
    }
}

代码四

package eight;

public class Person {
    private String name;
    private int age;
    protected double vision;
    protected double stature;
    int id = 1001;

    public Person(){
        this.vision = 5.0;
        this.stature = 170;
    }

    public Person(double vision){
        this();
        this.vision = vision;
    }
    public Person(int id,double stature){
        this(id);
        this.stature = stature;
    }

    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
    public int getAge(){
        return age;
    }
    public void setAge(int age){
        this.age = age;
    }
    public void eat(){
        System.out.println("吃饭");
    }
    public void walk(){
        System.out.println("走路");
    }

    private int sleep(){
        return 0;
    }

}

韧桂 2019-12-25