JAVA对象的继承(extends)

JAVA对象的继承(extends),第1张

一、Java面向对象的三个特性:封装(private)、继承(extends)和多态。

父类:

package com.itstuday.javabean;


public class Person {

    String name;
    String sex;
    int age;
     //父类私有属性
    private String address = "上海市浦东新区......";

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public void sleep(){
        System.out.println("人要睡觉....................." );
    }


}

子类:

(1)

public class Student extends Person {
    String year;

    public Student(String name, String sex, int age, String year) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.year = year;

    }

    public void study() {
        System.out.println(name+"在"+year+"上课..................");
    }


}

(2)

public class Teacher extends Person {

    public Teacher(String name,String sex,int age){
        this.name = name;
        this.sex = sex;
        this.age = age;

    }

    public void say(){
        System.out.println(name+"说好好学习.................." );
    }

}

测试类:

package com.itstuday.javabean;

public class test01 {
    public static void main(String[] args) {

        Student s = new Student("乔巴","男",8,"三年级");
        //父类继承过来的方法
        s.sleep();
        //学生特有的方法
        s.study();
        System.out.println("s = " + s.getAddress());
        Teacher t = new Teacher("布鲁克","男",88);
        t.sleep();
        //老师特有的方法
        t.say();
        t.setAddress("北京朝阳区");
        System.out.println("t = " + t.getAddress());
    }

}

结果:

总结:

1.类与类之间的继承需要用到extends关键字。

2.子类继承父类后可以直接使用父类中的非私有的成员变量、方法。

3.子类继承父类后如果要用到父类中的私有变量,需要通过get set方法。

4.继承是把公共的代码提取到父类中,减少代码的冗余,提供代码复用性。

5.子类不能继承父类的构造方法,因为构造方法与类名相同性质导致。

二、继承特点

1.类和类之间支持单继承和多重继承

2.类和类之间不支持多继承

package com.itstuday.javabean;

public class grandMa {
    String SexName = "Tome";
}
public class mother extends grandMa  {
}
public class daughter extends mother {
    //定义成员方法
    public void name(){
        System.out.println("SexName="+SexName);
    }
}

三、继承中的成员特点

主要围绕:成员变量  成员方法 构造方法。

1.继承特性

父类:

package com.itstuday.javabean;

public class mother {

    //定义成员变量
    int x = 10;
    //构造方法

    public mother () {
        System.out.println("父类的this="+this);
        System.out.println("父类的无参构造方法,x="+x);
    }

}

 子类:

public class daughter extends mother {
   //定义成员变量
    int y = 20;
    //定义构造方法

    public daughter() {
        System.out.println("子类的this="+this);
        System.out.println("子类的无参构造方法,x="+x+",y="+y);
    }
}

测试类:

public class test03 {
    public static void main(String[] args) {

        daughter daughter = new daughter();
        System.out.println("daughter = " + daughter);

    }
}

执行结果:

 

总结:

构造方法中都有隐式三步

1) super()调用父类的无参构造方法
2)显示给本类的所有的非静态成员变量赋值
3)执行本类的构造代码块 

注:第一步固定执行,二三步执行顺序与书写顺序有关系。

2.重名成员变量

父类:

package com.itstuday.javabean;

public class Father {

   int a = 10;

    public Father() {

        System.out.println("父类的无参构造方法"+a);
    }

 }

子类:
package com.itstuday.javabean;

public class Son extends Father {

    int a = 20;
    public Son(){
        System.out.println("子类中的a = " + a);
        System.out.println("子类中用super调用 = " + super.a);

    }

}

测试:

package com.itstuday.javabean;

public class test02 {
    public static void main(String[] args) {

        Son son = new Son();
    }
}

执行结果:

总结:

在子类中的变量名与父类一样,如果想调用父类中的成员变量,则需要用到super关键字。

super与this

public class Son extends Father {

    int a = 20;
    public Son(){
        int a = 30;
        System.out.println("子类中的a = " + a);//30
        System.out.println("子类中用super调用 = " + super.a);//10
        System.out.println("this = " + this.a);//20

    }

}

1)this是 *** 作本类的,super是 *** 作父类的,只有继承的时候才有super。

2)this记录着地址值,而super不能记录地址值。

3.成员方法

1.子类继承父类可以调用父类的非私有的成员方法。

2.如果子类的方法中和父类的中的方法名称相同、返回值类型一样并、参数一样切子类方法修饰权限大于或等于父类,则父类方法被重写。

方法重写只有在继承中出现。

父类:

package com.itstuday.javabean;

public class Father {

    //成员方法
    public void say(){
        System.out.println("爸爸说您好!");
    }

 }

子类:

package com.itstuday.javabean;

public class Son extends Father {

    //成员方法
    public void say(){
        System.out.println("儿子说哈哈!");
    }

}

测试类:

package com.itstuday.javabean;

public class test02 {
    public static void main(String[] args) {

        Son son = new Son();
        son.say();
    }
}

执行结果:

 

 子类重写父类方法后,以子类方法为主。

4.继承后构造器的特点

父类:

package com.itstuday.javabean;

public class mother {

    //1.成员变量
    int x = 10;
    //2.构造代码块
    {
        System.out.println("构造代码块,x="+x);
    }
    //3.构造方法

    public mother() {
        System.out.println("父类的无参构造方法,x="+x);
    }

}

子类:

package com.itstuday.javabean;

public class daughter extends mother {
    //1.成员变量
    int y = 20;
    //2.构造代码块
    {
        System.out.println("构造代码块,x="+x);
        System.out.println("构造代码块,y="+y);
    }
    //3.构造方法

    public daughter() {
        System.out.println("子类的无参构造方法,x="+x);
        System.out.println("子类的无参构造方法,y="+y);
    }
}

测试:

 

隐式三步执行顺序:

1)super()调用父类的无参构造方法
2)显示给非静态成员变量赋值
3)执行本类的构造代码块
    注意:隐式三步的2 3步执行顺序不固定,看书写前后顺序

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/793846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存