为什么要继承:
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
在不同的类中也可能会有共同的特征和动作,可以把这些共同的特征和动作放在一个类中,让其它类共享。
因此可以定义一个通用类,然后将其扩展为其它多个特定类,这些特定类继承通用类中的特征和动作。继承的注意点:
(1)子类不是父类的子集,子类一般比父类包含更多的数据域和方法。
(2)父类中的 private 数据域在子类中是不可见的,因此在子类中不能直接使用它们。
(3)继承是为”是一个”的关系建模的,父类和其子类间必须存在”是一个”的关系,否则不能用继承。但也并不是所有”是一个”的关系都应该用继承。例如,正方形是一个矩形,但不能让 Square 类来继承 Rectangle 类,因为正方形不能从矩形扩展得到任何东西。正确的继承关系是 Square 类继承 Shape 类
(4)Java 只允许单一继承(即一个子类只能有一个直接父类),C++ 可以多重继承(即一个子类有多个直接父类)。继承的关键字
extends,implements,super,this,final
entends:在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。
implements:使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。
super:通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
this:指向自己的引用。
final:关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写:举个栗子
1 import java.io.*; 2 class Animal{ 3 void eat(){ 4 System.out.println("animal:eat"); 5 } 6 } 7 class Dog extends Animal{ 8 void eat(){ 9 System.out.println("dog:eat"); 10 } 11 void eatTest(){ 12 this.eat(); 13 super.eat(); 14 } 15 } 16 17 public class Test{ 18 public static void main(String[] args){ 19 20 Animal a = new Animal(); 21 a.eat(); 22 Dog d = new Dog(); 23 d.eatTest(); 24 } 25 }
输出结果
animal:eat dog:eat animal:eat
构造器
子类不能继承父类的构造器(构造方法或者构造函数),但是父类的构造器带有参数的,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表。
如果父类有无参构造器,则在子类的构造器中用super调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。
举个栗子1 import java.io.*; 2 3 class SuperClass{ 4 private int n; 5 SuperClass(){ 6 System.out.println("SuperClass() "); 7 } 8 SuperClass(int n){ 9 System.out.println("SuperClass(int n):"+n); 10 this.n = n; 11 } 12 } 13 14 class SubClass extends SuperClass { 15 private int n; 16 17 SubClass(){ 18 super(300); 19 System.out.println("SubClass()"); 20 } 21 public SubClass(int n){ 22 System.out.println("SubClass(int n):"+n); 23 this.n = n; 24 } 25 } 26 public class TestSuperSub{ 27 public static void main(String[] args){ 28 SubClass sc = new SubClass(); 29 SubClass sc2 = new SubClass(200); 30 } 31 }
输出结果
SuperClass(int n):300 SubClass() SuperClass() ---系统自动调用父类无参构造器 SubClass(int n):200
2-java学习笔记
最新推荐文章于 2024-09-23 15:50:28 发布