继承基于封装,首先要有类生成好。继承,我的观点是,类是将一些具有相同属性方法集中到一起的结果,但是有的时候某些属于这些类的东西想拥有自己的独特的方法,独特的属性,但是也想调用该大类的原有的一些方法和属性。那么就产生了继承。继承,字面意思就强调必须有至少两个类才能实现继承。
鉴于方便起见,我将两个类写到同一个java文件中:
public class Apple extends Fruit
{
public Apple()
{
super(1);//自身没有带参数的构造方法,所以调用了父类的带参数的构造方法,依然需要写在第一行。
System.out.println("I am Apple!");
}
public void eat()
{
System.out.println("apple eat!");
}
public void give()//父类没有带一个参数的give方法,修改了父类的统一方法的参数数目或者类型成为重载(overload)
{
System.out.println("Apple give!");
super.give(1);//不是构造方法的一般方法不强调super()的位置。
}
public void give(int i)//在父类中有相同的give方法,所带参数一样,所以这个方法叫做重写,只是修改了方法执行的语句。(override)
{
System.out.println("apple 1 give!");
}
public static void main(String[] args)
{
Apple apple=new Apple();
apple.give();
apple.eat();
}
}
class Fruit
{
public Fruit(int i)
{
System.out.println("I am Fruit!");
}
public void eat()
{
System.out.println("Fruit eat!");
}
public void give(int i)
{
System.out.println("Fruit 1 give!");
}
}
输出结果如下:
I am Fruit!
I am Apple!
Apple give!
Fruit 1 give!
apple eat!
总结:1)父类的构造方法一定包含了子类的所有构造方法,子类不一定需要拥有父类的全部构造方法,如果想调用父类中子类没有的构造方法,可以用super()来实现;
2)只修改父类方法的执行结果,被称为重写;修改了父类方法中参数的类型和参数个数,被称为重载;
3)构造方法中的super和普通方法中的super要求不同,构造方法中的super代表初始化过程,必须写在最开始的位置,而普通方法中的super则不要求。