一、继承有什么用?
答:继承使得你可以定义一个通用的类(父类或超类、基类),之后扩充该类为一个更加特定的类(子类或派生类、导出类)。
二、如何判断是否为继承关系?
答:《JAVA编程思想》第四版P38中提到——基类和导出类之间的关系称为is-a (是一个)关系,因为可以说“一个圆形就是一个几何形状”判断是否继承,就是要确定是否可以用is-a来描述类之间的关系,并使之具有实际意义。
三、继承关键字:extends
四、继承中的super关键字。
super:指当前对象的超类对象
(1)super()--------------- 用来调用超类的构造方法。
(2)super.方法名()------用来调用超类的方法。(一般用在方法的重写之中,下一篇会讲到。)
(3)super.成员变量名--------用来调用超类的成员变量。
eg:
class Animal{ String name;//超类成员变量.... int age; Animal(String name){ this.name = name; } void eat(){//定义超类方法 System.out.println(name+"eat food...."); } } class Tiger extends Animal{ Tiger(String name){ super(name);//此处会调用超类带参的构造方法. } void eat(){ super.eat();//调用超类的方法 System.out.println("name: "+name+",age: "+super.age);//调用到超类的成员变量 } }
五、子父之间的构造方法调用关系。
子类会创建对象时会默认的调用父类的无参构造方法,原因是在子类构造方法中JVM会默认给我们添加一个隐藏的super()即便我们不去写它。
eg:
public class A { A(){ }}class B extends A{ B(){ //super(); 隐藏存在的. }}
值得注意的是,如果在父类中我们声明了带参的构造方法时,这时候JVM不会去给我们在父类中默认出一个无参的构造方法,这时候我们在创建子类对象时要主动去声明去调用父类中的哪一个构造方法否则会出现编译错误。
eg:
public class A { A(String name){ this.name = name; }}class B extends A{ B(String name){ super(name); }}
另外值还有两点是:
(1)this()和super()只能在构造方法存在一个,this()代表的是调用本类对象的其他构造方法和super()则是调用父类的构造方法。并且super()和this()在使用时必须要方法构造方法的第一行。
(2)this()和super()都是指向对象的,所以不能在static 环境中使用。
第一次写自己在学习中的笔记吧,也算是一些心得,包括自己的问题和班上同学们发现的问题,希望各位大佬能够指点指点。