㈠ java中什么是继承
继承在本职上是特殊一般的关系,即常说的is-a关系。子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的 一些属性或方法。
1.Java继承的语法格式:
Java继承的关键字是:extends
public class 子类名 extends 父类名{...}
如: public class UNStudent extends Student {...} 注:1.子类又称超类,拓展类 ;父类又称基类。
2.Java中类的继承只能是单继承(单根继承),即一个类只能继承一个父类,但是一个类可以由多个类来继承它。
3.Java会给每一个没有设置父类的类,自动添加一个父类就是Object 。
(1)java继承调用扩展阅读:
一、子类继承父类的结果
1.子类继承父类后,继承到了父类所有的属性和方法。注:是所有。
2.子类可调用的方法也要看情况而定:
子类和父类在同一个包下时 “子类和子类的对象”可以调用父类的默认的,受保护的,公有的属性以及方法。
子类和父类在不同的包下时,在子类中可以调用受保护的,公有的属性以及方法,而子类的对象可以调用受保护的,公有的属性以及方法。
二、方法的重写
1.当子类和父类都有某种方法,而子类的方法更加要求细致,或者实现功能不同,就需要方法的重写。
2.重写条件
①必须要存在继承关系;只有继承之间的关系才能有方法的重写
②方法的返回值类型,方法名,参数个数,参数类型,参数顺序,必须要完全一致;
如:父类中方法 public void play (int n ; String s){方法体1...}
重写后的子类方法public void play(int n ; String s){方法体2...}
3.子类重写方法时的访问修饰符可以大于或者等于父类方法的访问修饰符。
4.重写后的方法会被优先调用。
三、自动转型
自动转型的实现要求有继承关系
格式如下:父类名 对象名 = new 子类构造方法;
如:Student stu = new UNStudent;
而强制转型格式如下:子类名 对象名 = (子类名)父类对象名
如:UNStudent un = (Student)stu;
自动转型可以拓宽方法的作用访问域
在使用自动转型后,子类自己定义的方法是不能在自动转型后执行;
原因是因为Java的编译机制,它会优先判断父类中是否存在该方法,如果存在则通过编译,如果不存在则报错。
第二种自动转型:转型后只需要不同类的不同对象调用想吐的方法,很方便!
/**访问修饰符 返回值数据类型 方法名(父类类型 参数名,...){
调用方法。
}
父类名 对象名 = new 子类名;
子类名 对象名 = new 子类名;
方法名(对象名);
*/
比如拿到驾驶证为A2的人,可以驾驶重型货车,当然也可以驾驶大型货车,中型货车,小型货车,小客车,小轿车,摩托车... 可以选择第二种自动转型的方法,便于调用同一个方法。
自动转型好处:1.减少冗余代码;2.在方法设置参数时,扩大访问范围。
四、多态
多态是由方法重载,继承,方法重写,自动转型等技术的组合。
五、为什么需要继承?
1.提高代码的重用性。
2.提高程序的扩展性。
JAVA继承总结
㈡ java继承时,实例化子类,是否会默认调用父类构造方法
在
Java
中,无论是
explicit
还是
implicit
方式,都要求在子类的构造方法中调用其父类的构造方法。如果父类无构造方法(其实是一个默认无参的构造方法),那么子类的构造方法中会自动进行调用;如果
父类有自己的构造方法(这时父类不会有默认无参的构造方法),那么在子类的构造方法中,必须要调用父类的某个构造方法,而且必须是在构造方法的第一个语句
中进行调用。
究其原因,想必是
Java
语言设计者,要求子类有责任保证它所继承的父类尽快进入到一个稳定、完整的状态中。试想,如果没有这个约束,那么子类的某个继承自父类的方法可能会使用到父类中的一些变量,而这些变量并没有进行初始化,从而产生一些难以预料的后果。
也因此,当一个类的构造方法是
private
时,它是不可被
extends
的,因为子类构造方法难以调用到这个父类的构造方法。
㈢ java继承调用
1、首先创建一个父类
//A.java
publicclassA{
privateinti;
protectedintj;
publicvoidfunc(){
}
}
2、子类则可以使用父类的方法
//B.java
publicclassBextendsA{
}
详情JDK8教程可参考java基础技术网站52diandi.com
㈣ java继承中构造函数的调用顺序
首先是在main函数里面,jvm发现了程序建立了一个Sanwich的对象,于是jvm便会到Sanwich里面找到构造函数构造一个Sanwich对象。但是jvm发现Sanwich是PortableLunch的子类,所以jvm会要先构造PortableLunch的对象。可是PortableLunch类又是Lunch的子类,所以jvm会要去构造Lunch对象。同理,Lunch又是Meal的子类,因而jvm会要构造Meal的对象。之后jvm会依照Meal、Lunch、PortableLunch、Sanwich的层次结构逐级构造出Sanwich对象,从而打印出Meal()、Lunch()、PortableLunch()、Sanwich()。但是由于Sanwich类中有Bread、Cheese、Letter三个变量,如果你没有他们实例化的话,那么程序就此结束;可是你给这三个变量实例化了,因此Sanwich在调用构造函数Sanwich()之后,回过头来处理这三个实例化了的变量。所以程序又会打印出Bread()、Cheese()、Letter().
㈤ java 子类继承父类 可以直接调用父类属性和方法 为什么还要用多态
举个例子:
父类:A
子类:A1
子类:A2
父类中定义了一个方法method:,类A1和类A2有不同的实现,这是代码中定义一个类A,那么可以直接调用A的a方法即可,不用关心用A1还是A2去实例化的这个A对象,这就是多态的特性
A a;
a = new A1();或a = new A2();
a.method();只要改变这个a的实例化方式,就能执行不同对象的方法。
㈥ 关于java 继承类 子类调用父类方法访问属性问题
say这个方法是定义在父类Dog中的,所以他直接调用了父类的name,输出“小刘”。
如果把say这个方法复制一下放到HomeDog中,那它会调用HomeDog的name,输出“小明”。
㈦ java继承关系下的方法调用问题
在new Student().printPersonl();调用的时候,Student继承自Personl,但是Student没有重写父类的printPersonl方法。所以虽然你创建了子类Student,然后调用printPersonl方法,子类没有实现,自然就去父类找,然后找到了,就打印出来了!
㈧ Java 编程的继承调用问题
优选子类的方法,如果父类的方法是私有的,只能继承,不能调用,还是优选子类的方法;父类方法是公有的,还是优先选子类的方法。
㈨ 对于重写或继承的方法,java运行时系统根据调用方法 的类型来选择调用哪个方法
1.
继承的方法,指的是父类中有,子类中没有的方法,这样的方法,子类和父类对象直接调用即可,效果一样。
2.
重写的方法,指父类有,子类也有。这样的方法,对象是父类,就调用父类的方法,真正的对象是子类,那就调用子类的方法。
3.
动物
狗1
=
new
狗();
狗1.叫唤();这个时候会根据new
后面的具体的值判断,这里是狗叫,如果换成new
动物();
那就是动物叫了。