继承总结

匿名 (未验证) 提交于 2019-12-03 00:18:01

一.继承的概念
在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调用父类构造方法的代码必须位于子类构造方法的第一行,并只能出现一次。

文章来源: 继承总结
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!