继承使用的是extends关键字,java中只是支持单继承,不支持多继承。
子类从父类中继承了父类的field,方法
public class Fruit
{
public double weight;
public void info()
{
System.out.,println(this.weight);
}
}
public class Apple extends Fruit
{
public static void main(String[] args)
{
Apple a=new Apple();
a.weight=56.0;
a.info();
}
}
2.重写父类方法
方法的重写需要遵循“两同两小一大”的规则,“两同”就是方法名相同,形参列表相同;”两小“就是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等;”一大“指的是子类方法的访问权限应比父类方法的访问权限更大或相等。当子类覆盖了父类方法后,子类都得对象将无法访问父类中被覆盖的方法,但可以在子类中调用父类中被覆盖中的方法,如果需要在子类方法中调用父类中被覆盖的方法,则可以使用super(被覆盖的方法)或者父类类名(被覆盖的方法)作为调用者来调用父类中被覆盖的方法。
如果父类方法具有private访问权限,则该方法对其子类是隐藏的,因此其子类无法访问该方法,也就没有办法重写。
public class Dog
{
public string sex;
private void bark()
{
System.out.println("wangwang");
}
}
public class MiniDog extends Dog
{
public void bark()
{
System.out..println("WangWang");
}
}
//super限定
public class BigDog extends Dog
{
super.bark(); //父类Dog中的bark方法
public void bark() //BigDog的bark方法
{
System.out.println("Wangwang");
}
public void PrintSex()
{
System.out.println(super.sex); //打印父类的性别
}
}
调用父类构造器
class Base
{
public double size;
public String name;
public Base(String name,double size)
{
this.size=size;
this.name=name;
}
}
public class sub extends Base
{
public String color;
public Sub(double size,String name,String color)
{
super(size,name);
this.color=color;
}
public static void main(String[] args)
{
Sub s=new Sub(5.6,"测试对象",”红色“);
System.out.println(s.color+s.size+s.name);
}
}
子类构造器调用父类构造器分一下几种情况
1.子类构造器执行体的第一行使用super显示调用父类构造器,子类构造器将根据super调用里传入的实参列表调用父类对应的构造器
2.子类构造器执行体的第一行使用this显式调用本类中重载的构造器,系统将根据 this调用里传入的实参列表调用本类中的另一个构造器。执行本类中另一个构造器时将会调用父类构造器
3.子类构造器执行体中既没有super调用,也没有this调用,系统将会在执行子类构造器之前,隐式调用父类无参数的构造器。