Java进阶11、面向对象进阶(继承)

目录

面向对象三大特征之二:继承

继承概述、使用继承的好处

总结

继承的设计规范、内存运行原理

 ​

总结

继承的特点

总结

 ​

 总结

继承后:方法重写

 面试题

 总结:

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

继承后:子类构造器访问父类有参构造器

总结

this、super使用总结

 案例


面向对象三大特征之二:继承

继承概述、使用继承的好处

总结

继承的设计规范、内存运行原理

父类

package com.itheima.d5_extends_test;

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

    public void queryCourse(){
        System.out.println(name + "在查看课表~~");
    }

    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 com.itheima.d5_extends_test;

public class Student extends People{
    public void writeInt(){
        System.out.println(getName()+" 写下了:学习语法,很哈皮~~");
    }

}

 测试

package com.itheima.d5_extends_test;

public class Test {
    public static void main(String[] args) {
        Student s = new Student();
        s.setName("蜘蛛精");// 使用父类的
        s.setAge(999);// 使用父类的
        System.out.println(s.getName());// 使用父类的
        System.out.println(s.getAge());// 父使用父类的
        s.queryCourse();//父类的
        s.writeInt();//子类的
    }
}

 

 

 

 

总结

 

继承的特点

1.子类可以继承父类的属性和行为,但是子类不能继承父类的构造器。
 

public void eat(),公有时候,
t.eat();不报错。

改为私有就报错。

package com.itheima.d7_extends_feature;

public class Test {
    public static void main(String[] args) {
        //目标:理解继承的特点
        //1.子类不能继承父类的构造器
        // 2.子类是否可以继承父类的私有成员?可以的,只是不能直接访问。

        Tiger t = new Tiger();
        t.eat();
    }
}

class Animal {
    public void eat() {
        System.out.println("动物要吃东西");
    }

}

class Tiger extends Animal {

}

 

 

 

 

总结

 

 

 总结

 

继承后:方法重写

package com.itheima.d9_extends_methodoverride;

public class Test {
    public static void main(String[] args) {
        NewPhone huawei = new NewPhone();
        huawei.call();
        huawei.sendMessage();
    }
}

/**
 * 新手机:子类
 */
class NewPhone extends Phone {
    //重写方法
    public void call() {
        super.call();//先用爸爸的基本功能
        System.out.println("支持视频通话~~~");
    }

    //重写方法
    public void sendMessage() {
        super.sendMessage();
        System.out.println("支持发送图片和视频~~~");
    }

}

/**
 * 父类
 */
class Phone {
    public void call() {
        System.out.println("打电话开始~~");
    }

    public void sendMessage() {
        System.out.println("发送短信开始~~");
    }
}

 

 

 面试题

 总结:

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

package com.itheima.d10_extends_constructor;

public class Test {
    public static void main(String[] args) {
        Dog d1 = new Dog();
        System.out.println(d1);

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

        Dog d2 = new Dog("金毛");
        System.out.println(d2);
    }
}

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

class Dog extends Animal {

    public Dog() {
//        super();//写不写都有,默认找父类的无参数构造器执行
        System.out.println("==子类Dog无参数构造器被执行===");
    }

    public Dog(String name) {
//        super();//写不写都有,默认找父类的无参数构造器执行
        System.out.println("==子类Dog无参数构造器被执行===");
    }
}

继承后:子类构造器访问父类有参构造器

 父类

package com.itheima.d11_extends_constructor2;

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 com.itheima.d11_extends_constructor2;

public class Teacher extends People {
    public Teacher(String name,int age) {
        //调用父类的有参数构造器,初始化继承自父类的数据
        super(name,age);
    }
}

测试

package com.itheima.d11_extends_constructor2;

public class Test {
    public static void main(String[] args) {
        Teacher t = new Teacher("dilei", 18);
        System.out.println(t.getName());
        System.out.println(t.getAge());
    }
}

绕一圈出结果。

总结

 

this、super使用总结

 案例

 

package com.itheima.d12_this;

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

    public Student() {

    }

    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 setSchoolNane(String schoolName) {
        this.schoolName = schoolName;
    }
}

package com.itheima.d12_this;

public class Test {
    public static void main(String[] args) {
       //目标: 理解 this (...)作用,本类构造器去访问本类兄弟构造器
        Student s1 = new Student("殷素素","冰火岛自学");
        System.out.println(s1.getName());
        System.out.println(s1.getSchoolName());

        /*
        如果学生不填学校,默认这个对象的学校是黑马
         */
        Student s2 = new Student("张三丰");
        System.out.println(s2.getName());
        System.out.println(s2.getSchoolName());
    }
}

 

 

注意:this(…) super(…) 都只能放在构造器的第一行,所以二者不能共存在同一个构造器中。

因为this(...)调用了兄弟构造器,而兄弟构造器里面有了super(…)调用父亲的,所以二者不能共存在同一个构造器中。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值