Java基础之Java继承


这里是一段防爬虫文本,请读者忽略。
本文原创首发于CSDN,作者IDYS
博客首页:https://blog.csdn.net/weixin_41633902/
本文链接:https://blog.csdn.net/weixin_41633902/article/details/115741306
未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!


java继承

基本概述

  • 面向对象三大特征:
  1. 封装性
  2. 继承性
  3. 多态性
  • 继承的特点
  1. 子类可以拥有父类的“内容”
  2. 子类还可以拥有自己专有的内容

继承的基本演示

演示一

其他类

package com.idayuanshuai.www.Demo12;

public class Employee {
    public void method(){
        System.out.println("idys speaking");
    }
}

package com.idayuanshuai.www.Demo12;

public class Teacher extends Employee {

}

主类

package com.idayuanshuai.www.Demo12;

public class TestDemo1 {
    public static void main(String[] args) {
        Teacher te = new Teacher();
        te.method();
    }
}

结果输出:

idys speaking

继承中的成员变量

  • 在父子类的继承关系当中,如果成员变量重名,则创建子类对象时,访问有两种方式
  1. 直接通过子类对象访问成员变量
    • 等号左边是子类的变量,就优先用子类的变量,没有则向上查找
  2. 间接通过成员方法访问成员变量
    • 该方法属于那个类,就优先使用这个的变量,没有则向上查找

演示

其他类:

package com.idayuanshuai.www.Demo13;

public class FatherClass {
    int fNum =10;
    int num = 2;
    public void method(){
        System.out.println(num);
    }
}

package com.idayuanshuai.www.Demo13;

public class SonClass extends FatherClass{
    int num =20;
    int sNum = 100;
}

主类

package com.idayuanshuai.www.Demo13;

public class TestDemo {
    public static void main(String[] args) {
        SonClass s = new SonClass();
        s.method();
        new FatherClass().method();
        System.out.println(s.num);
        System.out.println(s.fNum);
    }
}

输出结果

2
2
20
10

重名变量的访问

  • 在子类中访问重名变量的方法
    • 访问局部变量:直接输出
    • 访问自己类的成员变量:this.成员变量名
    • 访问父类的成员变量:super.成员变量名

演示

  • 其他类
package com.idayuanshuai.www.Demo14;

public class SonClass extends FatherClass {
    int num = 20;
    public void method(){
        System.out.println(num);
        System.out.println(this.num);
        System.out.println(super.num);
    }
}


package com.idayuanshuai.www.Demo14;

public class FatherClass {
    int num=2;
}

  • 主类
package com.idayuanshuai.www.Demo14;

public class TestDemo1 {
    public static void main(String[] args) {
        new SonClass().method();
    }
}
  • 输出
20
20
2

方法覆盖重写

  • 重写:方法名一样;参数列表一样
  • 重载:方法名一样,参数列表不一样
  • @Override:写在方法前面,用来检测是不是有效的正确覆盖重写
  • 子类方法的返回值必须【小于等于】父类方法的返回值范围
  • java.lang.Object类是所有类的公共最高类(祖宗类),java.lang.Stringjava.lang.Object的子类
  • 子类方法的权限必须【大于等于】父类方法的权限修饰符

public > protected > (default)> private

  • 设计原则:对于已经投入使用的类,尽量不要修改,推荐定义一个新的类,来重复利用其中共性内容,并且添加改动新内容

演示一

  • 其他类
package com.idayuanshuai.www.Demo15;

public class Phone {
    public void call(){
        System.out.println("打电话");
    }
    public void send(){
        System.out.println("发短信");
    }
    public void show(){
        System.out.println("显示手机号码");
    }
}

package com.idayuanshuai.www.Demo15;

public class NewPhone extends Phone {
    @Override
    public void show() {
        super.show();
        System.out.println("显示头像");
        System.out.println("显示姓名");
    }
}
  • 主类
package com.idayuanshuai.www.Demo15;

public class TestDemo1 {
    public static void main(String[] args) {
        Phone ph = new Phone();
        ph.show();
        System.out.println("================");
        NewPhone np = new NewPhone();
        np.show();
    }
}
  • 输出结果
显示手机号码
================
显示手机号码
显示头像
显示姓名

继承中的构造方法

  1. 子类构造方法当中有一个默认隐含的super()调用,所以一定是先调用父类构造,然后执行子类构造
  2. 子类构造可以通过super关键字来调用父类重载构造
  3. super的父类构造调用,必须是子类构造方法的第一个语句,不能一个子类构造调用多次super构造
  4. 子类必须调用父类构造方法,不写则会直接调用super();写了则用写了的super,super构造方法只有一个

演示

  • 其他类
package com.idayuanshuai.www.Demo16;

public class FatherClass {
    public FatherClass(int n){
        System.out.println("your input is "+n);
    }
    public FatherClass(){
        System.out.println("no input");
    }
}

package com.idayuanshuai.www.Demo16;

public class SonClass extends FatherClass {
    public SonClass(){
        super(20);
        System.out.println("son class");
    }
}

  • 主类
package com.idayuanshuai.www.Demo16;

public class TestDemo1 {
    public static void main(String[] args) {
        SonClass sonClass = new SonClass();
    }
}

  • 输出结果
your input is 20
son class
  • java语言的继承是单继承,子类只能继承一个父类。

写在最后的话:

  • 无论每个知识点的难易程度如何,我都会尽力将它描绘得足够细致
  • 欢迎关注我的CSDN博客,IDYS’BLOG
  • 持续更新内容
    linux基础 | 数据通信(路由交换,WLAN) | Python全栈 | 云计算
  • 如果你有什么疑问,或者是难题。欢迎评论或者私信我。你若留言,我必回复!
  • 虽然我现在还很渺小,但我会做好每一篇内容。谢谢关注!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值