JAVA入门之继承 笔记(23)

}

}




下面展示一些 `测试类代码`。



package Dome;

/*

测试类

*/

public class ExtendDome {

public static void main(String[] args) {

    Zi z = new Zi();

    z.method();

    z.show();

}

}




下面展示一些 `代码执行结果`。  

![在这里插入图片描述](https://img-blog.csdnimg.cn/eb1f8541984843abbe4596858b240237.png)



> 可见,Zi继承了Fu的方法,因此,在Zi中可以直接调用Fu中的show方法。



[]( )四、继承的好处和弊端

=============================================================================



1.  **继承的好处**



> 1)提高了代码的复用性(多个类相同的成员可以放到同一个类中)  

> 2)提高了代码的维护性(如果方法的代码需要修改,修改一处即可)



2.  **继承弊端**



> 继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟着发生变化,削弱了子类的独立性



[]( )五、什么时候使用继承

-----------------------------------------------------------------------------



1.  继承体现的关系:is a

2.  假设法:我有两个类A和B,如果他们满足A是B的一种,或者B是A的一种,就说明他们存在继承关系,这时候就可以考虑使用继承关系来体现,否则就不能滥用继承关系

3.  举例:苹果与水果 、 猫和狗



[]( )六、继承中变量的访问特点

===============================================================================



下面展示一些 `父类代码`。



package Dome;

public class Fu {

int age = 40;

}




下面展示一些 `子类代码`。



package Dome;

public class Zi extends Fu {

int age = 20;

public void method(){

    System.out.println(age);

}

}




下面展示一些 `测试类代码`。



package Dome;

/*

测试类

*/

public class ExtendDome {

public static void main(String[] args) {

    Zi z = new Zi();

    z.method();

}

}




> 子类和父类都有age,如果代码执行,调用的age是子类的还是父类的呢?那就让我们实践见真理



![在这里插入图片描述](https://img-blog.csdnimg.cn/c0e8b423f89b468789b1650f241c4dbb.png)  

**那么如果方法中也有age呢?会发生什么?**  

下面展示一些 `子类代码`。



package Dome;

public class Zi extends Fu {

int age = 20;

public void method(){

	int age = 10;

    System.out.println(age);

}

}




![在这里插入图片描述](https://img-blog.csdnimg.cn/ff5ed25659f3456a8522505e8ab941e1.png)



* * *



_**通过这个案例我们可以得出以下结论(就近原则)**_



* * *



> 在子类方法中访问一个变量

> 

> 1.  子类局部范围找

> 2.  子类成员范围找

> 3.  父类成员范围找

> 4.  如果没有就报错(不考虑父亲的父亲)



[]( )七、super

==========================================================================



> 那么如果我想要访问父类的变量怎么办呢???  

> 这时候我们引入super关键字



* * *



super关键字的用法和this关键字的用法相似



1.  this:代表本类对象的引用

2.  super:代表父类存储空间的标识(可以理解为父类对象引用)



| 关键字 | 访问成员变量 | 访问构造方法 | 访问成员方法 |

| --- | --- | --- | --- |

| this | this.成员变量 访问本类成员变量 | this(…)访问本类构造方法 | this.成员方法() 访问本类成员方法 |

| super | super.成员变量 访问父类成员变量 | super(…) 访问父类构造方法 | super.成员方法(…) 访问父类成员方法 |



* * *



下面展示一些 `父类代码`。



package Dome;

public class Fu {

int age = 40;

}




下面展示一些 `子类代码`。



package Dome;

public class Zi extends Fu {

int age = 20;

public void method(){

    int age = 10;

    System.out.println(age);

    System.out.println(this.age);

    System.out.println(super.age);

}

}




下面展示一些 `测试类代码`。



package Dome;

/*

测试类

*/

public class ExtendDome {

public static void main(String[] args) {

    Zi z = new Zi();

    z.method();

}

}




![在这里插入图片描述](https://img-blog.csdnimg.cn/68c7e6284a7e47c1811ae182f9f9a4ec.png)



> 通过this和super我们就可以调用不同的同名变量或者方法



* * *



[]( )八、继承中构造方法的访问特点(1)

====================================================================================



> 引入案例



下面展示一些 `父类代码`。



package Dome;

public class Fu {

public Fu() {

    System.out.println("Fu无参构造方法被调用");

}

public Fu(int age){

    System.out.println("Fu有参构造方法被调用");

}

}




下面展示一些 `子类代码`。



package Dome;

public class Zi extends Fu {

public Zi() {

    System.out.println("Zi无参构造方法被调用");

}

public Zi(int age){

    System.out.println("Zi有参构造方法被调用");

}

}




下面展示一些 `测试类代码`。



package Dome;

/*

测试类

*/

public class ExtendDome {

public static void main(String[] args) {

    Zi z = new Zi();



}

}




当执行程序的时候发现



![在这里插入图片描述](https://img-blog.csdnimg.cn/e39b2560321642dea55d1c94dc6eb2ef.png)  

Zi中构造方法被访问的时候会先去访问Fu中的构造方法



这是为什么呢??



那么让我们尝试用有参构造方法试一试



package Dome;

/*

测试类

*/

public class ExtendDome {

public static void main(String[] args) {

    Zi z = new Zi(10);



}

}




![在这里插入图片描述](https://img-blog.csdnimg.cn/4bad9eadf2404a37b763734bde8da9b6.png)



为什么子类所有构造方法默认都会访问父类无参的构造方法呢???



> 1.  因为子类会默认继承父类中的数据, 还可能会使用父类的数据。所以,子类初始化之前,一定会完成父类数据初始化。

> 2.  每一个子类构造方法的第一条默认语句是super()



那么倘若Fu类中没有无参构造方法,只有有参构造方法,程序应该怎么该呢??



下面展示一些 `父类代码`。



package Dome;

public class Fu {

/*public Fu() {

    System.out.println("Fu无参构造方法被调用");

}*/

public Fu(int age){

    System.out.println("Fu有参构造方法被调用");

}

}




下面展示一些 `子类代码`。



package Dome;

public class Zi extends Fu {

public Zi() {

	super(20);

    System.out.println("Zi无参构造方法被调用");

}

public Zi(int age){

	super(20);

    System.out.println("Zi有参构造方法被调用");

}

}




下面展示一些 `测试类代码`。



package Dome;

/*

测试类

*/

public class ExtendDome {

public static void main(String[] args) {

    Zi z = new Zi();



}

}





# 1200页Java架构面试专题及答案

小编整理不易,对这份**1200页Java架构面试专题及答案**感兴趣劳烦帮忙**转发/点赞**

![](https://img-blog.csdnimg.cn/img_convert/bd98c61405a53f614a2bb2bfeb0e9236.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/cbbc8dcf9241ac05247c85a7095f9dea.webp?x-oss-process=image/format,png)

# 百度、字节、美团等大厂常见面试题

![](https://img-blog.csdnimg.cn/img_convert/4bcfab1802c03c55ce83f7ce69a2c8a7.webp?x-oss-process=image/format,png)

lass Zi extends Fu {

    public Zi() {

    	super(20);

        System.out.println("Zi无参构造方法被调用");

    }

    public Zi(int age){

    	super(20);

        System.out.println("Zi有参构造方法被调用");

    }

}



下面展示一些 测试类代码


package Dome;



/*

    测试类

 */

public class ExtendDome {

    public static void main(String[] args) {

        Zi z = new Zi();



    }

}



1200页Java架构面试专题及答案

小编整理不易,对这份1200页Java架构面试专题及答案感兴趣劳烦帮忙转发/点赞

[外链图片转存中…(img-TVQwbLyX-1719266362022)]

[外链图片转存中…(img-FSzS2XpC-1719266362023)]

百度、字节、美团等大厂常见面试题

[外链图片转存中…(img-swu0zsES-1719266362023)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值