继承

在父类和子类的继承关系中 如果成员变量重名 则访问有两种方式

直接通过子类对象访问成员变量
等会左边是谁 就优先用谁 ,没有则向上找

间接通过成员方法访问成员变量
该方法属于谁 就优先用谁没有则向上找

成员变量的访问
局部变量 直接在方法里面访问
本类的成员变量:this.成员变量名
父类的成员变量:super.成员变量名

成员方法

在父类和子类的基础关系中 创建子类对象 访问成员方法的规则:
创建的对象是谁 就优先用谁 如果没有就向上找
注意实现
无论是成员方法还是成员变量,如果没有都是向上找父类 不会向下找子类

重写(Override)
概念:在继承关系当中 方法的名称一样,参数列表也一样

重写(Override)方法的名称一样,参数列表也一样 也叫 覆盖覆写
重载(Overload)方法的名称一样,参数列表不一样

方法的覆盖重写特点:创建的是子类对象,则优先用子类方法

方法的覆盖重写的注意事项:
1 必须保证父类子类之间的名称相同 参数列表页相同
@Override:写在方法前面 要来检测是不是有效的正确覆盖重写
这个注解就算不写,只要满足要求,也是正确的方法覆盖重写

2子类方法的返回值必须【小于等于】父类方法的返回值范围
小扩展提升:java.lang.Object类是所有类的公共最高父类(祖宗类)

3 子类方法的权限必须【大于等于】父类方法的权限修饰符。
小扩展提升
public>protected>(default)>private
备注:(default)不是关键字default,而是什么都不写留空

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

构造方法
继承关系中 父子类构造方法的访问特点:
1 子类构造方法当中有一个默认隐含的“super()” 调用,所有一定是先调用父类构造 后执行的子类构造

2 子类构造可以通过super关键字来调用父类重载构造

3 super的父类构造调用,必须是子类构造方法的第一个语句
(只有子类构造方法,才能调用父类构造方法)

总结
子类必须调用父类构造方法 不写则赠送super;写了则用写的指定的super调用

super的三种用法
1 在子类的成员方法中访问父类的成员变量
2 在父类的成员方法中访问父类的成员方法
3 在子类的构造方法中访问父类的构造方法

super关键字用来访问父类的内容,而this关键字用来访问本类内容
1 在本类的成员方法中,访问本类的成员变量
2 在本类的成员方法中,访问本类的另一个成员方法
3 在本类的构造方法中,访问本类的另一个构造方法
第三种用法当中要注意:
A this(…)调用也必须是构造方法中的第一个语句,唯一一个
B superhe和this两种构造调用不能同时使用

package Test.fuzijicheng.gouzaofangfajicheng; //独立文件
public class fu {
    int n;
    fu(){
        System.out.println("父类的构造方法");
    }
    void method(){
        System.out.println("父类的成员方法");
    }
}



 package Test.fuzijicheng.gouzaofangfajicheng; //独立文件
                      public class zi extends fu {
                          int n;
                         zi(){
                             this(3333);   //在本类的构造方法方法本类的构造方法
                             this.n=9999;  //在本类的方法中调用本类的成员变量
                         }
                         zi(int n){
                             super(); //在子类的构造方法中访问父类的构造方法
                             System.out.println("子类构造方法");
                         }
                         @Override
                          void method(){
                  
                          System.out.println(super.n);  //在子类的成员方法中访问父类的成员变量
                          super.method();               //在子类的成员方法中访问父类的成员方法
                          this.method(23333);        //在本类的成员方法中访问本来的成员方法
                      }
                      void  method(int n){
                          System.out.println(++n);
                      }
                      public static void main(String[] args) {
                          zi a1=new zi(333332);
                      }
                  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值