简述继承
Java中是单继承模式:
一个父类可以有多个子类,但是一个子类只能有一个父类。
继承:public class A extends B{}
A类称为子类,B类称为父类。A类具有B类拥有的属性和方法,除了构造方法、私有属性和私有方法。子类可以添加自由独有的属性和方法来拓展功能。
- 若子类也声明了与父类同名的属性并赋值,子类对象创建后,该属性的值为该子类的属性。
- 若子类没有声明与父类同名的属性,子类对象创建后,该属性的值为该父类的属性值。
class Father{
String name ="父亲";
}
class Son extends Father{
String name ="儿子";
}
public class Demo{
public static void main(String args[]){
Son s =new Son();
System.out.println(s.name);
}
}
//结果为:儿子
//若注释掉String name ="儿子"; 结果为:父亲
继承带来的优点:
是一种代码重用的重要手段,也是实现“开闭原则”的基础,同时子类还可以添加自己独有的属性和方法,来拓展父类功能开闭原则,对拓展开放,对修改关闭。
重写和重载
重载:在同一个类中,同名不同参的方法叫做重载。(编译时多态,静态多态,overload)
重写:在子类中,同名、同参且返回值相同的方法叫做重写。子类的修饰符范围不小于父类的修饰符范围。(运行时多态,override)
class Employee {
public Employee() {
}
void show() {
System.out.println("父类show方法");
}
void show(String word) { // 重载
word = "父类重载show方法";
System.out.println(word);
}
}
class Officer extends Employee {
public Officer() {
super();//调用父类构造
}
void show(String word) { // 重写
word = "子类重载show方法";
System.out.println(word);
}
}
public class Demo1 {
public static void main(String[] args) {
Officer o = new Officer();
o.show();
o.show("haha");
}
}
在重写父类的构造方法时,一定要看清父类的构造方法是否重载,根据需求写出子类的构造方法。(看清有参无参)
super作用:
- ①super(args)调用父类其它构造器,只能用在子类构造器第一行,只能用一次。
- 若父类同时拥有有参和无参构造器时,super只能写一个。(按照需求)
- ②super.属性名或super.方法名。调用父类对象的属性和方法。
- ③super用法与this用法一样,只不过this表示当前类对象。super表示父类对象。
面试题:请描述子类实例化过程
class Father {
String name = "Father";
public Father() {
System.out.println("父类无参构造器");
}
public Father(int i) {
System.out.println("父类有参构造器");
}
}
class Son extends Father {
String name = "son";
public Son() {
//super();//通过形参区别调用的父类的哪个构造器。
super(1);
System.out.println("子类构造器");
}
}
public class Test {
public static void main(String[] args) {
Son s = new Son();
}
}
答:在实例化子类对象时,会先调用父类的构造方法,实例化父类的对象。
输出结果为:父类有参构造器
子类构造器
- 创建子类对象时,子类构造器会默认调用父类的无参构造器先创建父类对象,之后再创建子类对象。
- 若父类没有无参构造器,子类构造器必须使用super显式调用父类的有参构造器,否则便会出错。
网友评论