浅析Java继承总结

一.继承的概念
在java中,类的继承是指在一个现有类的基础上创建一个新的类,构建出的新类被称作子类,子类会自动拥有父类所有可继承的属性和方法。在程序中,如果想声明一个类继承另一个类,需要使用extends关键字。

//定义Animal类
class Animal {
String name;
//定义动物叫的方法
void shout() {
System.out.println("动物发出叫声");
}
}
//定义Dog类继承Animal类
class Dog extends Animal {
//定义一个打印name的方法
public void printName() {
System.out.println("name="+name);
}
}
//定义测试类
public class Example {
public static void main (String[] args){
Dog dog=new Dog();  //创建一个Dog类的实例对象
dog.name="沙皮狗"//为Dog类的name属性进行赋值
dog.printName();   //调用Dog类的printName()方法
dog.shout();     //调用Dog类继承来的shout()方法
}
}

Dog类通过extends关键字继承了Animal类,这样Dog类便是Animal类的子类。子类虽然没有定义name属性和shout()方法。但是却能访问这两个成员。说明子类在继承父类的时候,会自动拥有父类所有的成员。

在类的继承中,需要注意如下问题:
1.在java中,类只支持单继承,不允许多重继承,也就是说一个类只能有一个直接父类,如下是不合法的:

class A{}
class B{}
class C extends A,B{}  // C类不可以同时继承A类和B类

2.多个类可以继承一个父类,例如下面这种情况是允许的。

class A{}
class B extends A{}
class C extends A{}    //类B和类C都可以继承类A

3.在java中,多层继承是可以的,即一个类的父类可以再去再去继承另外的父类,例如:

class A{}
class B extends A{}  //类B继承类A,类B是类A的子类
class C extends B{}  //类c继承类B,类C是类B的子类,同时也是类A的子类

二.重写父类方法
在继承关系中,子类会自动继承父类中定义的方法,但有时在子类中需要对继承的方法进行一些修改,即对父类方法进行重写。需要注意的是:在子类中重写的方法需要和父类被重写的方法具有相同的方法名,参数列表以及返回值类型。

//定义Animal类
class Animal {
//定义动物叫的方法
void shout() {
System.out.println("动物发出叫声");
}
}
//定义Dog类继承Animal类
class Dog extends Animal {
//定义狗叫的方法
void shout() {
System.out.println("旺旺……");
}
}
//定义测试类
Public class Example {
public static void main (String[] args) {
Dog dog = new Dog();   //创建Dog类实现对象
dog.shout();           //调用dog重写的shout()方法
}
}

在调用Dog类对象的shout()方法时,只会调用子类重写的方法,并不会调用父类的shout()方法。
注意:子类重写父类方法时,不能使用比父类中被重写的方法更严格的访问权限,如父类中的方法是public的,子类的方法就不能是private。

三.super关键字
当子类重写父类的方法后,子类对象将无法访问父类被重写的方法,此时需要引入super关键字用于访问父类的成员。
super关键字用法如下:
1.使用super关键字调用父类的成员变量和成员方法,格式如下:

super.成员变量
super.成员方法([参数1,参数2…])
//定义Animal类
class Animal {
String name="动物";
//定义动物叫的方法
void shout() {
System.out.println("动物发出叫声");
}
}
//定义Dog类继承动物类
class Dog Extends Animal {
String name="犬类";
//重写父类的shout()方法
void shout() {
super.shout();                          //访问父类的成员方法
}
//定义打印name的方法
void printName() {
System.out.println("name="+super.name); //访问父类的成员变量
}
}
//定义测试类
public class Exanple {
public static void main (String[] args) {
Dog dog = new Dog();   //创建一个Dog对象
dog.shout();           //调用dog对象重写的shout()方法
dog.printName();       //调用dog对象的printName()方法  
}
}

2.使用super关键字调用父类的构造方法,格式如下:
super.成员方法([参数1,参数2…])

//定义Animal类
class Animal {
//定义Animal类有参的构造方法
public Animal (String name) {
System.out.println("我是一只"+name);
}
} 
//定义Dog类继承Animal类
class Dog extends Animal {
public Dog (){
super("沙皮狗");              //调用父类有参的构造方法
}
}
//定义测试类
public class Example {
public static void main (String[] args) {
Dog dog = new Dog();          //实例化子类Dog对象
}
} 

需要注意,在通过super调用父类构造方法的代码必须位于子类构造方法的第一行,并只能出现一次。

猜你喜欢

转载自blog.csdn.net/qq_41930448/article/details/80421321