2023.3.3--java基础语法学习day12--继承

文章讲述了面向对象编程中的继承概念,包括Java中的单继承特性,以及如何通过继承提高代码的复用性和维护性。同时,文章还介绍了方法的重写,当父类的方法不能满足子类需求时,子类如何重写这些方法以适应自身需求,并遵循的规则。
摘要由CSDN通过智能技术生成

1.继承

封装:对象代表什么就得封装对应的数据,并提供数据对应的行为
继承是面向对象三大特征之一。(封装,继承,多态)
j继承可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。(子类可以使用父类的公有属性,不能访问父类中的私有成员)
子类可以有父类的内容,子类还可以有自己特有的内容,子类的内容是子类加上父类,是子类和父类的并集
父类的私有属性或者方法子类也不能调用

Java中提供一个关键字extends,用这个关键字,我们可以用一个类和另一个类建立起继承关系

public class 子类 extends 父类

提高了代码的复用性(多个类相同的成员可以放到同一个类中) 提高了代码的维护性(如果方法的代码需要修改,修改一处即可)
优点提高了代码的复用性(多个类相同的成员可以放到同一个类中) 提高了代码的维护性(如果方法的代码需要修改,修改一处即可)
什么时候用继承当类与类之间,存在相同的内容,并满足子类是父类的一种,就可以考虑继承
继承的特点

java中只支持单继承,不支持多继承,但支持多层继承

单继承一个子类只能继承一个父类
多继承一个子类不支持继承多个父类
多层继承子类A继承父类B,父类B可以继承父类C

每一个类都直接或间接继承于Object

父类
类的成员构造方法(不论是什么样的修饰符,子类都不能从父类中继承)
成员方法(不论是什么样的修饰符,子类都可以把成员变量继承下来,但私有的不能被直接调用,需要通过一定的get/set方法,只有父类中的虚方法才能被继承)
成员变量(非私有的能被继承下来,私有的不能被继承下来)
成员变量的访问特点就近原则,先在局部位置找,如果没有再到成员位置找,最后再到父类的成员位置找,一级一级往上

package com.cn.whx.model;
public class Test {
    public static void main(String[] args) {
        Zi z = new Zi();
        z.ziShow();
    }
}
class Fuu {
    String name = "Fu";
}
class Zi extends Fuu {
    String name = "Zi";
    public void ziShow() {
        String name = "Zishow";
        System.out.println(name);//Zishow   //先在局部位置找,如果没有再到成员位置找,最后再到父类的成员位置找
        System.out.println(this.name);//Zi   //从本类成员位置往上找
        System.out.println(super.name);//Fu   //从父类成员位置往上找
    }
}

2.方法的重写

方法的重写(一定是在子父类的关系上的)当父类的方法不能满足子类的需求时需要进行方法的重写
在继承体系中,子类出现了和父类一模一样的方法声明,我们就称这个方法是重写的方法
如果子类重写了从父类中继承过来的方法,那么父类中重写的方法就会覆盖                                                                                                                                                                                                  
重写方法的名称和形参列表必须与父类中一致
子类重写父类方法时,访问权限必须大于等于父类
子类重写父类方法时,返回值类型必须小于等于父类

 

package com.cn.whx.model;
public class Test1 {
    public static void main(String[] args) {
        Student s=new Student();
        OverseasStudent s1=new OverseasStudent();
        s.lunch();
        s1.lunch();
    }
}
//父类
class Person{
    public void eat()
    {
        System.out.println("吃米饭");
    }
    public void drink()
    {
        System.out.println("喝热水");
    }
}
//子类学生
class Student extends Person {
    public void lunch()
    {
        //本类成员位置无,往上找,在父类中找到
        this.eat();
        this.drink();
        //去父类中找
        super.eat();
        super.drink();
    }
}
//子类留学生
class OverseasStudent extends Person{
    public void lunch()
    {
        //在本类成员位置中找
        this.eat();
        this.drink();
        //在父类中找
        super.eat();
        super.drink();
    }
    //方法的重写
    //当父类中的方法无法满足子类现在的需求时,我们就需要把这个方法进行重写
    //子类中重写的方法需要加上@Override
    @Override
    public void eat()
    {
        System.out.println("吃汉堡");
    }
    public void drink()
    {
        System.out.println("喝冷水");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值