目录
一、继承
继承就是子类可以从父类中获取并使用父类的方法和属性,并且可以在继承过来的方法和属性上进行修改。就像孩子会继承父母的特点,但又不会完全一样。
public class Animal {
void eat()
{
System.out.println("动物可以进食");
}
}
public class Human extends Animal {
public static void main(String[] args) {
Human a = new Human();
a.eat();
}
}
//输出结果:”动物可以进食”
Human类中没有添加任何方法和属性,但是因为继承了Animal类,所以可以直接调用父类中的公共方法eat()
注意:如果父类中的方法或者属性是私有类型的,则不能直接调用。
public class Animal {
private int age = 10;
public void getAge() {
System.out.println(age);
}
}
public class Human extends Animal {
public static void main(String[] args) {
Human a = new Human();
a.getAge();
}
}
由于父类中的属性是私有的,子类需要通过公有的getAge()方法去调用age,而不能直接调用到属性。
二、类型
继承包括单继承,多继承和多重继承
单继承是一个父类只对应一个子类
public class Human extends Animal
多继承是一个父类对应多个子类
多重继承就是一个类同时拥有父类和子类
class Human extends Animal
class Human extends Animal
三、super和this
super是子类用于实现父类中的属性或者方法的关键字
this是子类调用自己的关键字,一般属性和方法默认为this
public class Animal {
public int num = 10;
}
public class Human extends Animal {
int num = 100;
void showAge() {
System.out.println(super.num+","+num);
}
public static void main(String[] args) {
Human a = new Human();
a.showAge();
}
}
//输出结果为10,100
showAge()因为用了super关键字,所以调用的是父类中num的值。
四、重写方法
子类可以对父类的方法进行重写,前提是访问修饰符大于或等于父类(public>protected>private)。而且返回值类型,方法名,参数完全一样。
public class Animal {
protected void out()
{
System.out.println("这是父类的输出");
}
}
public class Human extends Animal {
public void out()
{
System.out.println("这是子类的输出");
}
public static void main(String[] args) {
Human a = new Human();
a.out();
}
}
//输出结果:这是子类的输出
out()方法被重写,所以显示子类的输出
注意:可以新建类在main函数中完成 “父类名 对象=new 子类名()” 的创建对象过程
在之前代码基础上新建testout类,完成操作。
public class testout {
public static void main(String[] args) {
Animal a = new Human();
a.out();
}
}
//输出结果为:这是子类的输出
程序运行过程是从父类里找到out()方法,再到子类找到同名已经被重写的方法,按照被重写的方式进行输出。代码省略了一步强制类型转换
Animal a = (Animal)new Human();
即把子类类型转换为父类类型地向上转换。
编译器可以自动进行向上转换。