继承(inheritence)
1.java是单继承的,即一个类只能继承另一个类(被继承的叫父类,继承的叫子类),java中继承使用extends关键字。
例如:
//继承的结构是:子类名 + extends + 父类名
//子类:
public class Child extends Parent {
public Child() {
。。。。。。。。。
}
publicstatic void main(String[] agrs) {
Childchild = new Child();
}
}
//父类:
class Parent {
。。。。。。。。。
}
}
2.当生成子类对象时,java默认先调用父类的不带参数的构造方法,然后执行该构造方法,生成父类的对象;然后去调用子类的构造方法,生成子类的对象。(要想生成子类的对象,首先要升成父类的对象,没有父类对象就没有子类对象)。
要想改变这种默认调用方试有两种途径:
1)给父类加一个不带参数的构造方法;
2)在子类中使用super(参数值)关键字。(表示对父类对象的引用)super和this一样,必须是构造方法的第一条执行语句,前面不能有任何其他可执行语句。
例如:
1)
//继承的结构是:子类名 + extends + 父类名
//子类:
public class Child extends Parent {
public Child(){
System.out.println("child");
}
public static void main(String[] agrs) {
Child child = new Child();
}
}
//父类:
class Parent {
public Parent(int i) {
System.out.println("parent");
}
public Parent() {
System.out.println("noargs parent");
}
}
2)
//继承的结构是:子类名 + extends + 父类名
//子类:
public class Child extends Parent {
public Child(){
super(1);
System.out.println("child");
}
public static void main(String[] agrs) {
Childchild = new Child();
}
}
//父类:
class Parent {
publicParent(int i) {
System.out.println("parent");
}
}
3.关于继承的三点:
1)父类有的特征,子类全有;
2)父类没有的,子类可以增加;
3)父类有的,子类可以改变。
4.关于继承的注意事项:
1)构造方法不能被继承;
2)方法和属性可以被继承;
3)子类的构造方法默认地调用父类的不带参数的构造方法;
4)当父类没有不要带参数的构造方法是,子类需要使用super来调用父类的构造方法,super指的是对父类的引用;
5)super和this一样必须是构造方法中的第一行可执行语句。
5.方法重写(Override):又叫做覆写,子类与父类的方法的返回类型一样,方法名一样,参数一样,这样我们就说子类与父类的方法构成了重写关系。
6.方法重写与方法重载之间的关系:重载(继承关系)发生在同一个类内部的两个或多个方法。重写(平行关系)发生在父类与子类之间。
7.当两个方法形成重写关系时,可以在子类方法中通过super.run()形式调用父类的run()方法,其中supe.run()不必放在第一行语句,因此此时调用子类的run()方法是根据程序的逻辑决定的。
//同时调用子类和父类中的方法
//方法一
public class InheritenceTest{
public static void main(String[] agrs) {
Dog dog = new Dog();
dog.run();
dog.run(1);
}
}
class Animal {
public void run() {
System.out.println("animal is running");
}
}
class Dog extends Animal {
public void run(int i) {
System.out.println("dog is running");
}
}
//方法二
public class InheritenceTest{
public static void main(String[] agrs) {
Dog dog = new Dog();
dog.run();
}
}
class Animal {
public void run() {
System.out.println("animal is running");
}
}
class Dog extends Animal {
super.run();//调用父类的run方法
public void run() {
System.out.println("dog is running");
}
}
8.在定义一个类的时候,如果没有显式指定该类的父类,那么给类就会继承于java.lang.Object类(JDK提供的一个类,Object类是Java中所有类的直接或间接父类)。