面向对象进阶7---继承

继承

什么是继承

在这里插入图片描述

案例分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述

代码说明

package StaticDemo2;

public class people {
    private String name;
    private int age;

    public people() {
    }

    public people(String name, int age) {
        this.name = name;
        this.age = 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;
    }
}

package StaticDemo2;

public class Teacher extends people{

    // 独有的功能
    public void teacher(){
        System.out.println("老师教书育人。");
    }
}

package StaticDemo2;

public class Student extends people{

    public void student(){
        System.out.println("学生再学习");
    }



}

package StaticDemo2;

public class test {
    public static void main(String[] args) {
        //  创建子类对象看一下是否可以使用父类的属性和行为
        Student s = new Student();
        s.setName("小明");
        s.setAge(25);

        System.out.println(s.getName());
    }
}

在这里插入图片描述

继承设计规范

在这里插入图片描述

设计案例

在这里插入图片描述
代码演示

package StaticDemo3;

public class student207 extends people207 {
    private String className;

    public void student(){
        System.out.println(getClassName()+"的"+getName()+"学生再快乐的学习");
    }

    public void writerinfo(){
        System.out.println("填写课程评价");
    }



    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }
}

package StaticDemo3;

public class teacher207 extends people207 {

    private String part;

    // 独有属性
    public void teacher(){
        System.out.println(getName()+"老师再教书");
    }


    public String getPart() {
        return part;
    }

    public void setPart(String part) {
        this.part = part;
    }
}

package StaticDemo3;

public class people207 {
    private String name;
    private int age;

    // 共同行为
    public void queryCourse(){
        System.out.println(name+"开始查看课表信息");
    }

    public people207() {
    }

    public people207(String name, int age) {
        this.name = name;
        this.age = 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;
    }
}

package StaticDemo3;

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

        // 创建子对象,可以使用父类的属性和行为
        student207 s = new student207();

        s.setAge(25);
        s.setName("小明");
        s.setClassName("通信工程");

        System.out.println(s.getName());
        System.out.println(s.getAge());

        s.student();
    }
}

运行结果
在这里插入图片描述

程序运行原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述

继承的特点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结、

在这里插入图片描述

继承后成员变量成员方法的访问特点

就近原则

在这里插入图片描述

代码说明

package StaticDemo3;

public class extendsdemo{
    public static void main(String[] args) {
        wolf w = new wolf();
        System.out.println(w.name);  // 子类的

    }
}

class animal{
    public String name="父类动物";
}

class wolf extends animal{
    public String name="子类动物";
}

结果演示
在这里插入图片描述

this与super访问

关键字的就近原则

package StaticDemo3;

public class extendsdemo{
    public static void main(String[] args) {
        wolf w = new wolf();
        System.out.println(w.name);  // 子类的
        w.showname();


    }
}

class animal{
    public String name="父类动物";
}

class wolf extends animal{
    public String name="子类动物";

    public void showname(){
        String name = "局部名称";
        System.out.println(this.name); // 子类名称
        System.out.println(super.name); // 父类名称
    }
}

结果演示
在这里插入图片描述
方法的就近原则

package StaticDemo3;

public class extenddemo2 {
    public static void main(String[] args) {
        son s = new son();
        s.run();
        System.out.println("==============================");
        s.go();
    }
}

class people{
    public void run(){
        System.out.println("父类run方法");

    }
}

class son extends people{
    public void run(){
        System.out.println("子类的run方法");
    }

    public void go(){
        run();// 子类
        this.run();//子类
        super.run();//父类
    }
}

在这里插入图片描述

小结

在这里插入图片描述

方法重写

什么是方法重写

在这里插入图片描述

代码演示

父类

package StaticDemo4;

public class phone {
    public void call(){
        System.out.println("打电话开始");
    }

    public void sendmessage(){
        System.out.println("发送短信");
    }
}

子类

package StaticDemo4;

public class newphone extends phone {
    /*
    * 方法重写
    * */
    public void call(){
        // 声明继承父类方法
        super.call();
        System.out.println("支持视频通话");
    }

    public void sendmessage(){
        super.sendmessage();
        System.out.println("可以发送彩信和图片");
    }
}

测试

package StaticDemo4;

public class test {
    public static void main(String[] args) {
        newphone n = new newphone();
        n.call();
        n.sendmessage();

    }
}

运行结果
在这里插入图片描述

重写注意事项

在这里插入图片描述
案例分析----私有方法不能重写
在这里插入图片描述
案例分析—重写的优先级
在这里插入图片描述
在这里插入图片描述
子类无法重写父类的静态方法
在这里插入图片描述

小结

在这里插入图片描述

子类构造器的特点

子类构造器继承父类后的构造器特点

在这里插入图片描述

程序演示

父类

package StaticDemo4;

public class Animals {
    public Animals(){
        System.out.println("=======父类Animals无参数构造器被执行======");
    }
}

子类

package StaticDemo4;

public class Cat extends Animals {
    public Cat(){
        System.out.println("====子类Cat无参数构造器被触发执行=====");
    }
}

测试

package StaticDemo4;

public class test2 {
    public static void main(String[] args) {
        Cat c = new Cat();
    }
}

结果
在这里插入图片描述
程序改进我们来观察有参数构造器是否和无参数构造器一样,我们不改变父类构造器,仅改变子类构造添加一个有参数构造器功能,其他功能不变

package StaticDemo4;

public class Cat extends Animals {
    public Cat(){
        System.out.println("====子类Cat无参数构造器被触发执行=====");
    }

    public Cat(String n){
        System.out.println("=====子类有参数构造器被触发执行=========");
    }
}

package StaticDemo4;

public class test2 {
    public static void main(String[] args) {
        Cat c = new Cat();
        System.out.println("===================");
        Cat c1 = new Cat("小叮当");
    }
}

在这里插入图片描述

小结

在这里插入图片描述

子类构造器访问父类有参数构造器

Super调用

在这里插入图片描述

代码演示

父类

package StaticDemo5;

public class People {
    private String name;
    private int age;

    public People() {
    }

    public People(String name, int age) {
        this.name = name;
        this.age = 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;
    }
}

子类

package StaticDemo5;

public class Student extends People{

    private String calssName;
    // 先整一个无参数构造器
    public Student(){

    }


    public Student(String name,int age,String calssName){
        // 一定要访问父类的无参数构造器
        super(name,age);
        this.calssName = calssName;
    }


    public String getCalssName() {
        return calssName;
    }

    public void setCalssName(String calssName) {
        this.calssName = calssName;
    }
}

测试类

package StaticDemo5;

public class test {
    public static void main(String[] args) {
        Student s = new Student("张三",25,"通信工程");
        System.out.println(s.getCalssName());
        System.out.println(s.getAge());
        System.out.println(s.getName());

    }
}

运行结果
在这里插入图片描述

小结

在这里插入图片描述

this,super使用小结

this&super详情

在这里插入图片描述

案例演示

在这里插入图片描述
主代码

package StaticDemo6;

public class Student {
    private String name;
    private String schoolName;

    public Student() {
    }

    // this调用本类构造器,这里并没有用继承
    public Student(String name){
        this(name,"学校未知");
    }

    public Student(String name, String schoolName) {
        this.name = name;
        this.schoolName = schoolName;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSchoolName() {
        return schoolName;
    }

    public void setSchoolName(String schoolName) {
        this.schoolName = schoolName;
    }
}

测试

package StaticDemo6;

public class Test {
    public static void main(String[] args) {
        Student s = new Student("乔巴","java培训");
        System.out.println(s.getName());
        System.out.println(s.getSchoolName());

        System.out.println("======================================");

        Student s1 = new Student("小王");
        System.out.println(s1.getName());
        System.out.println(s1.getSchoolName());
    }
}

运行结果
在这里插入图片描述

参考

黑马程序员

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Peihj2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值