Java入门-第九节-继承和重写
一.继承
1.定义
•
继承是面向对象编程的三大特征之一,是一种基于已有类来创建新类的机制。由继承而得到的类称为子类(或派生类)
,
被继承的类称为父类(或超类)。
•
Java
中每个类只允许有一个父类。语法如下:
class
<
子类
>
extends
<
父类
>
•
Object
类是所有类的直接父类或间接父类。
•
根据访问权限修饰符的不同
,子类可以继承父类中某些成员变量和方法,提高了代码的重用性,子类也可以添加新的成员变量和方法:
•
如果类被
final
修饰,则该类不能被继承:
•
Java
中已有的类(诸如
Void
、
String
、
Class
、
Scanner
、
System
、
8
种基本数据类型对应包装类等类)已经被
final
修饰,所以这些类不能被继承。
2.父类对子类构造方法的影响
•
如果父类拥有无参构造方法(无论隐式的还是显式的)且子类中的构造方法又没有明确指定调用父类的哪个构造方法,则子类中没有调用该子类其它构造方法的构造方法使用
super
()
隐式调用父类的无参构造方法,如下代码:
子类Student中该构造函数没有使用this调用本类中其它构造函数,所有该函数中使用隐含的super()调用父类无参构造函数。
子类Student中该构造函数使用this调用本类无参构造函数,则该构造函数中不存在super()调用父类无参构造函数的情况,这一点可以通过分析运行程序后的结果看出来
•
如果父类没有无参构造方法(无论隐式的还是显式的),则要求子类构造方法必须
直接
或
间接
指定调用父类哪个构造方法并且放在有效代码第一行,如下代码:
•
当子类成员变量和父类成员变量
同名
时,
对子类对象来讲
,父类的成员变量不能被子类继承(即子类的成员变量覆盖了父类的成员变量),此时称子类的成员变量
隐藏
了父类的成员变量。
•
如果要在子类非
static
修饰的代码块或方法中使用被隐藏的父类成员变量可以通过
super
关键字实现。
在子类static修饰的代码块中用创建一个新的对象来实现调用
在子类static修饰的代码块中用创建一个新的对象来实现调用
String name="aaa"; static { String name ="sss"; System.out.println(new New().name); System.out.println(new Human().name); } public static void main(String[] args) { New new1 =new New(); }
二.重写
子类可以继承父类方法,但有时从父类继承的方法在子类中必须进行修改以适应新类的需要,这种对父类方法进行改写或改造的现象称为方法重写或方法覆盖。父类方法在子类中重写使继承更加灵活。
子类重写了父类的方法,则使用子类创建的对象调用该方法时,调用的是重写后的方法,即子类中的方法:
public class New extends Human{ @Override public void hit() { System.out.println(11111); } public static void main(String[] args) { New new1 = new New(); new1.hit(); Human human =new Human(); human.hit(); } }
public class Human { String name="ddd"; public void hit() { System.out.println(name+"正在打"); } public void walk() { System.out.println(name+"正在散步"); } }