继承特点、访问特点、方法重写1

1.继承的特点:

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

   //子类有自己的构造器,父类构造器用于初始化父类的对象

②java是单继承模式,一个类只能继承一个直接父亲;

③java不支持多继承、但是支持多层继承;

④java所有的的类都是Object的子类;

//Java中的所有类,要么直接继承Object,要么默认继承Object,要么间接继承Object,Object是祖宗类。

那么子类是否可以继承父类的私有成员呢,我认为是可以的,但是不能直接访问。

子类是否可以继承父类的静态成员?

有争议的知识点,子类可以直接使用父类的静态成员(共享并非继承)

比如:

package prac2;

public class ExtendsDemo {
    public static void main(String[] args) {
        Student str = new Student();
       Student.inAdder();
        System.out.println(Student.onlineNumber);
    }
}

class People{
    private int age;
    public void run(){
        System.out.println("人都会跑!");
    }
    public static int onlineNumber = 12;
    public static void inAdder(){
        System.out.println("学习java");
    }
}

class Student extends People{

}

2.访问特点:

①在子类中访问成员(成员变量、成员方法)满足就近:就近原则

如果子父类中,出现了重名的成员,会优先使用子类的,那么该怎么办?

   可以通过super关键字,指定访问父类的成员。(格式为:super.父类成员变量/父类成员方法)

   它先在子类局部范围找,然后在子类成员范围找,然后在父类成员范围找,如果还没找到就报错

具体如下:

  

public class ExtendsDemo2 {
    public static void main(String[] args) {
        Wolf s = new Wolf();
        System.out.println(s.name);
        s.showName();

    }
}
    class Animal{
        public String name = "父类的动物";
    }
    class Wolf extends Animal{
        public String name = "子类的动物";
        public void showName(){
            String name = "局部变量";
            System.out.println(name);//局部的
            System.out.println(this.name);//子类的
            System.out.println(super.name);//父类的
        }
    }
E:\develop\Java\jdk-17\bin\java.exe "-javaagent:E:\idea\IntelliJ IDEA Community Edition 2023.3.4\lib\idea_rt.jar=65027:E:\idea\IntelliJ IDEA Community Edition 2023.3.4\bin" -Dfile.encoding=UTF-8 -classpath E:\code\stduy1\out\production\stduy1 prac2.ExtendsDemo2
子类的动物
局部变量
子类的动物
父类的动物

Process finished with exit code 0

public class ExtendsDemo2 {
    public static void main(String[] args) {
       Stu a = new Stu();
       a.run();
       a.go();

    }
}
    class Peo{
        public void run(){
            System.out.println("人可以跑");
        }
    }
    class Stu extends People{
        public void run(){
            System.out.println("学生可以跑很快");
        }
        public void go(){
            run();
            super.run();
        }
    }

E:\develop\Java\jdk-17\bin\java.exe "-javaagent:E:\idea\IntelliJ IDEA Community Edition 2023.3.4\lib\idea_rt.jar=65361:E:\idea\IntelliJ IDEA Community Edition 2023.3.4\bin" -Dfile.encoding=UTF-8 -classpath E:\code\stduy1\out\production\stduy1 prac2.ExtendsDemo2
学生可以跑很快
学生可以跑很快
人都会跑!

Process finished with exit code 0

3.方法重写:

定义:在继承体系中,子类出现了和父类中一模一样的方法声明,我们就称子类的这个方法是重写的方法

应用场景:当子类需要父类的方法,但父类的给功能不能完全满足自己的需求时;

                  子类可以重写父类中的方法

列如:

//父类
public class Phone {
    public void call(){
        System.out.println("打电话开始");
    }
    public void message(){
        System.out.println("发送短信开始");
    }
}
//子类
public class NewPhone extends Phone{

    @Override
    public void call() {
       super.call();
        System.out.println("开始视频通话");
    }
    @Override
    public void message() {
        super.message();
        System.out.println("支持发送图片和视频");
    }
}
//测试代码
public class Text {
    public static void main(String[] args) {
        NewPhone huawei = new NewPhone();
        huawei.call();
        huawei.message();
    }
}

输出:

E:\develop\Java\jdk-17\bin\java.exe "-javaagent:E:\idea\IntelliJ IDEA Community Edition 2023.3.4\lib\idea_rt.jar=64845:E:\idea\IntelliJ IDEA Community Edition 2023.3.4\bin" -Dfile.encoding=UTF-8 -classpath E:\code\stduy1\out\production\stduy1 methodoverride.Text
打电话开始
开始视频通话
发送短信开始
支持发送图片和视频

Process finished with exit code 0

@Override是放在重写后的方法上的,作为重写是否正确的校验注解

建议重写方法都加上Override注解

4.方法重写的注意事项和要求

①重写方法的名称、形参列表必须与被重写方法的名称和参数列表一致

②私有方法不能重写

③子类重写父类的方法时,访问权限必须大于或等于父类

④子类不能重写父类的静态方法,如果重写会报错

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值