Java-继承

继承
面向对象三大特征之一。可使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
关于继承中变量访问特点
在方法中使用变量,首先去方法内部找,没有则去本类成员内部去找,若也没有,则会去父类成员位置去找
在这里插入图片描述
(观察三段代码不同)

package smile;
public class main1 {
    public static void main(String []args) {
        Zi z=new Zi();
        z.show();
    }
}
class Fu{
   public int age=40;
}
class Zi extends Fu{
    public int height=175;
    public void show(){
        System.out.println(age);
        System.out.println(height);
    }
}
/*输出
40
175
*/
package smile;
public class main1 {
    public static void main(String []args) {
        Zi z=new Zi();
        z.show();
    }
}
class Fu{
   public int age=40;
}
class Zi extends Fu{
    public int height=175;
    public int age=20;//子类中有则不会去使用父类的
    public void show(){
        System.out.println(age);
        System.out.println(height);
    }
}
/*输出
20
175
*/

package smile;
public class main1 {
    public static void main(String []args) {
        Zi z=new Zi();
        z.show();
    }
}
class Fu{
   public int age=40;
}
class Zi extends Fu{
    public int height=175;
    public int age=20;
    public void show(){
        int age=30;//方法内部有则优先
        System.out.println(age);
        System.out.println(height);
    }
}
/*输出
30
175
*/

super
在这里插入图片描述

package smile;
public class main1 {
    public static void main(String []args) {
        Zi z=new Zi();
        z.show();
    }
}
class Fu{
   public int age=40;
}
class Zi extends Fu{
    public int age=20;
    public void show(){
        int age=30;
        System.out.println(age);//访问方法中的成员变量30
        System.out.println(this.age);//访问本类中成员变量20
        System.out.println(super.age);//访问父类中成员变量40
    }
}
/*输出
30
20
40
*/

继承中构造方法的访问特点
在这里插入图片描述

package smile;
public class main1 {
    public static void main(String []args) {
        Zi z=new Zi();
        Zi z1=new Zi(10);
    }
}
class Fu{
   public Fu(){
       System.out.println("Fu类中无参构造方法被调用");
   }
    public Fu(int age){
        System.out.println("Fu类中带参构造方法被调用");
    }
}
class Zi extends Fu{
    public Zi(){
        System.out.println("Zi类中无参构造方法被调用");
    }
    public Zi(int age){
        System.out.println("Zi类中带参构造方法被调用");
    }
}
/*输出
Fu类中无参构造方法被调用
Zi类中无参构造方法被调用
Fu类中无参构造方法被调用
Zi类中带参构造方法被调用
*/

继承中成员方法的访问特点
在这里插入图片描述

package smile;
public class main1 {
    public static void main(String []args) {
        Zi z=new Zi();
        z.method();
        z.show();
    }
}
class Fu{
   public void show(){
       System.out.println("Fu类中show()方法被调用");
   }
}
class Zi extends Fu{

    public void method(){
        System.out.println("Zi类中method()方法被调用");
    }
    public void show(){
        super.show();//访问父类的成员方法
        System.out.println("Zi类中show()方法被调用");
    }
}
/*输出
Zi类中method()方法被调用
Fu类中show()方法被调用
Zi类中show()方法被调用
*/
举例
package smile;
public class main1 {
    public static void main(String []args) {
        Zi z=new Zi();
        z.show();
        z.method();
    }
}
class Fu{
    public int age=40;
    public Fu(){
        System.out.println("Fu类无参构造方法被调用");
    }
    public void method(){
        System.out.println("Fu类method方法被调用");
    }
}
class Zi extends Fu{
    public int age=20;
    public Zi(){
        super();
        System.out.println("Zi类无参构造方法");
    }
    public void show(){
        int age=30;
        System.out.println(age);
        System.out.println(this.age);//通过this访问的成员变量
        System.out.println(super.age);//通过super访问的成员变量
    }

}
/*输出
Fu类无参构造方法被调用
Zi类无参构造方法
30
20
40
Fu类method方法被调用
*/

方法重写
在这里插入图片描述

package smile;
public class main1 {
    public static void main(String []args) {
        Phone p=new Phone();
        p.call("lili");
        System.out.println("-----");
        newPhone np=new newPhone();
        np.call("lili");
    }
}
class Phone{
    public void call(String name){
        System.out.println("给"+name+"打电话");
    }
}
class newPhone extends Phone{
    public void call(String name){//方法重写,与父类声明方法一样
        System.out.println("开启视频功能");
        System.out.println("给"+name+"打电话");
        //super.call(name);//利用父类的call方法输出给lili打电话
    }

}
/*输出
给lili打电话
-----
开启视频功能
给lili打电话
*/

方法重写的注意事项
私有方法不能被重写(父类私有成员变量不能被继承)
子类方法访问权限不能更低(public>默认>私有)

class Fu{
    private void show(){
        System.out.println("Fu中show()方法被调用");
    }//zi类不可以访问
   void method(){
        System.out.println("Fu中method()方法被调用");
    }//zi类访问可以加public也可以不加
}

Java继承注意事项
Java中类只支持单继承,不支持多继承
Java中类支持多层继承

错误示例
class Mother{
    private void dance() {
        System.out.println("mother爱跳舞");
    }
}
public class Son extends Father,Mother{

}
支持多层继承
class Granddad{
    public void drink(){
        System.out.println("爷爷爱喝酒");
    }
}
class Father extends Granddad{
    public void smoke(){
        System.out.println("爸爸爱抽烟");
    }
}
class Son1 extends Father{

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值