一、什么是继承?
继承是有上一个类,可以拿来使用,不用重新把已有类的内容再次书写一遍。已有的类被称为父类,新的类被称为子类。如同活字印刷术,需要的时候只要调用出以后的模板字就行,不需要再次刻画字体的。
类的定义格式:
clas 子类名 extends 父类名{
属性和方法
}
在java 中使用extends关键字来表示两个类之间的继承关系。
package demo;
//定义父类
class Parent {
String name;
double property;
public void Say(){
System.out.println(name+"的财产"+property);
}
}
//子类Child继承父类
class Child extends Parent {
int age;
public void sayage(){
System.out.println(name+"的年龄"+age);
}
}
public class TestExtends {
public static void main(String[] args) {
Child c= new Child();
c.name="小明";
c.property=100;
c.age=20;
c.Say();
c.sayage();
}
在上述代码中Child通过extends关键字继承Parent的类,而Child不仅继承了Parent的类方法还自己进行了age年龄的扩展,定义了一个sayAge()方法,说明了子类扩展父类功能。
多层父类的继承:在Java中不支持多重继承,但支持多层的继承,就是说一个类的父类可以继承其他的父类,因此一个类中存在一个类的间接的多层父类。
class A{ }
class B extends A{ }
class C extends B{ }
二、重写父类:
在继承关系中,子类从父类中继承了可访问的方法,但是有时候继承下来的方法无法满足我们的需求,如下中显示,如果要求父类与子类的say()方法输出不同的内容,这时就可以在子类的方法中对父类的进行修改,就是在子类中重新定义父类中的变量。就是用子类对父类的代码进行覆盖,但这里我们要考虑的是父类的权限的问题,是否对子类的禁止修改的或者覆盖的问题。
package demo;
//定义父类
class Parent2{
protected void say(){
System.out.println("父类");
}
}
//子类继承父类
class Child2 extends Parent2 {
public void say(){
System.out.println("子女");
}
}
public class TestOverride{
public static void main(String[] args) {
Child2 c =new Child2();
c.say();
}
}
super关键字:
在上述的子类重写父类方法中,子类对象将无法访问父类被重写的方法。如果在子类中需要访问父类的被重写的方法,可通过super关键字的实现。
格式如下:
super.成员变量
super.成员方法([实参列表])
示例代码如下:
package demo;
class Parent3{
String name ="Parent";
protected void say(){
System.out.println("父类");
}
}
//子类继承父类
class Child3 extends Parent3 {
public void say(){
String name = super.name;
super.say();
System.out.println("姓名"+name);
}
}
public class TestSuper{
public static void main(String[] args) {
Child3 c =new Child3();
c.say();
}
}
super.p()很明显是作为对象使用的,这里就代指父类的原型对象,而p方法是定义在A的原型上面的,所以返回值是2。理所当然调用b.m就取不到值。
这也从侧面说明:constructor()方法一般情况下就是只A本身,而类中的一般方法是定义在类的原型对象上的。

被折叠的 条评论
为什么被折叠?



