继承
-Man extends Human表示Man继承于Human
-Human是父类, Man是子类
-子类继承父类所有的属性和方法(但不能直接访问private成员)
-根据信息隐藏原则:子类会继承父类所有的方法。可以直接使用
-子类也会继承父类的父类的所有的属性和方法(但不能直接访问private成员)
-单根继承原则:每个类只能继承一个类
一个父类Human()
有两个成员属性height和weight,和一个成员属性eat()
public class Human {
int height;
int weight;
public void eat()
{
System.out.println("I can eat!");
}
}
继承Human()的子类Man()
public class Man extends Human
{
//overwrite重写父类方法
public void eat(){
System.out.println("I can eat more");
}
//扩展,比父类拥有更多的方法
public void plough(){
System.out.println("I can plough");
} //耕田
public static void main(String[] a) {
Man obj1 = new Man();
obj1.eat();
}
}
输出
I can eat more
在同样方法名和参数情况下,本类的方法会比父类的方法优先级高
子类可以通过调用父类的方法来访问父类的私有的成员属性
继承类的构造函数
-每个Java类都必须有构造函数
-每个子类的构造函数的第一句话,都默认调用父类的无参数构造函数super(),除非子类的构造函数第一句话是super,而且super语句必须放在第一条,不会出现连续两条super语句
父类A
public class A {
public A()
{
System.out.println("111111");
}
public A(int a)
{
System.out.println("222222");
}
}
子类B继承A
public class B extends A{
public B()
{
//super(); 编译器自动增加super(),先引用A的无参构造函数,输出111111
System.out.println("333333");
}
public B(int a)
{
super(a);
//编译器不会自动增加super();先引用A的含有int a参数的构造函数,输出222222
System.out.println("444444");
}
public static void main(String[] a)
{
B obj1 = new B();
System.out.println("==============");
B obj2 = new B(10);
}
}
输出:
111111
333333
==============
222222
444444