在一个类中继承于一个父类,需要使用extend
关键字来表示。
A:子类、派生类、subclass
B:父类、超类、基类、superclass
public class A extends B {
....
}
体现:
java.lang.Object
类java.lang.Object
类之外)都直接或间接的继承于java.lang.Object
类java.lang.Object
类声明的功能。重写:子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作。
应用:重写以后,当创建子类对象以后,通过子类对象调用子父类中的同名同参数的方法时,实际执行的是子类重写父类的方法。
重写的规定:
1. 方法的声明: 权限修饰符 返回值类型 方法名(形参列表) throws
异常的类型 { }
2. 约定俗称:
private
权限的方法。3. 返回值类型:
void
,则子类重写的方法的返回值类型只能是void
。double
),则子类重写的方法的返回值类型必须与父类一致。4. 异常类型:子类重写的方法抛出的异常类型不能大于父类被重写的方法所抛出的异常类型。
子类和父类中的同名同参数的方法要么都声明为非
static
的(考虑重写),要么都声明为static
的(不是重写)。
super
理解为:父类的
super
可以用来调用:属性、方法、构造器
super.属性
"或"super.方法
"的方式,显式的调用父类中声明的属性或方法。但是,通常情况下,我们习惯省略super.
super.属性
"的方式,表明调用的是父类中声明的属性。super.方法
"的方式,表明调用的是父类中被重写的方法。super(形参列表)
"的方式,调用父类中声明的指定的构造器。super(形参列表)
"的使用,必须声明在子类构造器的首行!this(形参列表)
"或"super(形参列表)
"只能二选一,不能同时出现。this(形参列表)
"或"super(形参列表)
",则默认调用的是父类中空参的构造器:super()
。super(形参列表)
",调用父类中的构造器从结果上来看:(继承性)
从过程上来看:当我们通过子类的构造器创建子类对象时,我们一定会直接或间接的调用其父类的构造器,进而调用父类的父类的构造器,...直到调用了java.lang.Object
类中空参的构造器为止。正因为加载过所有的父类的结构,所以才可以看到内存中有父类中的结构,子类对象才可以考虑进行调用。
明确:虽然创建子类对象时,调用了父类的构造器,但是自始至终就创建过一个对象,即为new的子类对象。
多态性:可以理解为一个事物的多种形态。
什么是多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)。
多态的使用:虚拟方法调用
总结:编译,看左边;运行,看右边。
多态性的使用前提: ① 类的继承关系 ② 方法的重写
对象的多态性,只适用于方法,不适用于属性(编译和运行都看左边)。
package com.tuoyingtao.java7;
//多态性的使用举例一
public class AnimalTest {
public static void main(String[] args) {
AnimalTest test = new AnimalTest();
test.func(new Dog());
test.func(new Cat());
}
public void func(Animal animal) { //Animal animal = new Dog();
animal.eat();
animal.shout();
}
}
class Animal {
public void eat() {
System.out.println("动物:进食");
}
public void shout() {
System.out.println("动物:叫");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("动物:吃骨头");
}
public void shout() {
System.out.println("动物:汪汪汪");
}
}
class Cat extends Animal {
public void eat() {
System.out.println("动物:吃鱼");
}
public void shout() {
System.out.println("动物:喵喵喵");
}
}
原文:https://www.cnblogs.com/BeautifulGirl230/p/14119567.html