Java导入和继承为什么使用继承搞不清楚?


 
 
 
 
 
 



建立一个可执行main方法类


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

发布了80 篇原创文章 · 获赞 30 · 访问量 2万+

 继承是多个类中存在相同属性和方法时将这些内容放到单独一个类中,那么多个类无需再定义这些属性和行为只要继承那个类即可。多个类可以称为子类单独这个類称为父类。(这样就不用多次写重复的代码了)子类可以继承父类除构造方法(构造方法是类特有的可以调用)外所有的属性和方法(包括Private私有属性和方法,)

可以直接访问父类中的非私有的属性和方法,不可以直接访问到父类的Private属性和方法

继承的大致可理解为一種包含关系,比如学生是一个类包含大学生、中学生、小学生。 public class UNStudent(子类) extends Student(父类)可有多个子类但只能有一个父类(好比现实中的父子關系)但可以多重继承,构成一种体系

java中所有类都默认继承Object类(它是这个体系中的老大,上帝般的存在)


2.方法重写(覆盖)学生有學习方法,但不是所有学生的学习方法都一样所以在子类UNStudent中可以重写大学生的学习方法,把Student父类中通用的方法覆盖

(注意:方法重写時, 返回值类型 方法名 参数列表(参数类型 个数 顺序) 都要一致

方法重写可以实现多态都是study的方法,在子类中重写后就会有不同的study方法

下图父类Student中的学习方法
下图是子类UNStudent中的学习方法
通过方法重写子类中study的方法可以把父类中的方法覆盖。


在调用某方法时先去子类中找该方法,如果没有再去父类中找

强制类型转化后父类可以调用子类中特有的方法。

子类的对象转为父类(自下而上)是自动转型

  在面试中在java基础方面,类嘚加载顺序经常被问及很多时候我们是搞不清楚到底类的加载顺序是怎么样的,那么今天我们就来看看带有继承的类的加载顺序到底是怎么一回事在此记下也方便以后复习巩固!

下面让我们修改一下两个类中静态代码块和静态成员变量的位置并重新运行

由测试结果可知:程序首先加载类,然后再对类进行初始化

加载类的顺序为:先加载基类,基类加载完毕后再加载子类

初始化的顺序为:先初始化基類,基类初始化完毕后再初始化子类

最后得出类加载顺序为:先按照声明顺序初始化基类静态变量和静态代码块,接着按照声明顺序初始化子类静态变量和静态代码块而后按照声明顺序初始化基类普通变量和普通代码块,然后执行基类构造函数接着按照声明顺序初始囮子类普通变量和普通代码块,最后执行子类构造函数

对于本测试中的执行顺序为:先初始化static的变量,在执行main()方法之前就需要进行加载再执行main方法,如果new一个对象则先对这个对象类的基本成员变量进行初始化(非方法),包括构造代码块这两种是按照编写顺序按序執行的,再调用构造函数 关于继承的初始化机制,首先执行含有main方法的类观察到Zi类含有基类Fu,即先加载Fu类的static变量再加载Zi类的static变量。加载完static变量之后调用main()方法,new Zi()则先初始化基类的基本变量和构造代码块再调用基类的构造方法。然后再初始化子类Zi的基本变量和构造代碼块再执行子类的构造函数。

我要回帖

更多关于 为什么使用继承 的文章

 

随机推荐