1、继承和重载
关于继承的理解就应从简单的父子关系理解吧,父与子是一种很特殊的关系,儿子继承了父亲的很多特征,但是儿子和父亲有所不同。问你一个简单的问题一个儿子 可能有两个亲生父亲吗?当然不可能!所以Java没有多继承!也许你会问这样讲Java不是胡诌吗?在这里你一定要知道Java的一条真理:万物皆对象。 理解一个Java的语法不可死记硬背,一定要和对象联系起来。相信现在你一定不会忘记Java不支持多继承了!
学习一门知识如果可以理解它而不是机械的记忆,会获得很多意想不到的收获,在学习的同时又加深的对万事万物的领悟这不是我们追求的一种逍遥吗? 在Java中引入继承的概念主要是为了方法的覆盖和重载打下一个坚实的基础。在这里我想先着重讲一下重载。很多人分不清什么是重载什么是覆盖,如果是这样我可以告诉你一个很简单你的办法,只要知道它是不是重载就好了。 想一想最原始的类的概念吧,就是把确实存在事物转变成计算机的一种数学模型罢了,比如说人类,Java中就叫Public class Person(关于命名规范的问题可以自己查一下Java的API
只要照着其中规范写就可以了)我们人类有很多的行为,在Java中把类的行为称为方法,我举一个例子吧,比如吃饭是一种行为,但是放入我们口中可能是各种 各样的食物,如果是苹果我们就咬着吃,如果是八宝粥我们就喝了它,如果喂我们吃草呢?当然要吐掉,还要大骂一声是谁这么缺德,给我吃草!好了不开玩笑了, 写一个程序!
package Blog; //Blog是包名
public class Apple//苹果 { }
package Blog;
public class Babao//八宝粥 { }
package Blog;
public class Weed//草 { }
package Blog;
public class Person//人类
{//定义了3个重载的方法,参数表不同 public void eat(Apple apple) {
System.out.println(\苹果来了,咬着吃\ }
public void eat(Babao babao) {
System.out.println(\好香的八宝粥,喝了它\ }
public void eat(Weed weed) {
System.out.println(\是谁这么缺德,给我吃草!\ } }
package Blog;
public class Test {
public static void main(String[] args) { Person person=new Person(); Apple apple=new Apple(); Babao babao=new Babao(); Weed weed=new Weed(); person.eat(apple); person.eat(babao); person.eat(weed); } }
测试程序中最后三行的都是吃的方法,但是参数表不同,结果也是完全不同的。
从这个例子我们可以看出这就是重载,记住它的本质就是方法名相同,参数表一定不同。
所以判断一个方法是不是另一个方法的重载只需要看这两点。当然还有一点你要知道如果子类一个方法和父类的一个方法满足这两个条件它也是一种重载!
关于继承的补充:一个父类拥有的方法子类是可以继承的,所以在编写子类的时候如果不需要改变某个父类方法那么字子类中可以不写这个方法,子类将自动持有这个方法!
同包的时候子类无条件继承除了父类的私有属性和方法之外的一切属性和方法 不同包的时候子类继承父类的public和protected级别的属性和方法
2、方法的覆盖
在讨论方法的覆盖时我还想拿父子做一个例子,为了把问题讲得更明白些,我决定把爷爷也加入其中,祖孙三代同堂帮我完成方法覆盖的任务。想一想在我们祖辈时 期写字用的是毛笔,现在呢,用计算机打字了,从面向对象的观点来看,祖孙三的代很多特性和行为都没有改变,只是很少的一部分改变了,如果我们在每个类中的 重写相同的方法想一想是不是很合理呢?当然不是的,所以对于没有改变的行为在子类中就不需要重复再写了,只有那些已经改变了的方法,我们才需要重写它。对 于这个在子类中被重新写入的方法我们把它叫做方法的覆盖。举一个例子 package blog;
public class Grandfather { public void write() {
System.out.println(\用毛笔写字!\
} }
package blog;
public class Father extends Grandfather{ }
package blog;
public class Son extends Father{ public void write() {
System.out.println(\我们是新一代,写字用电脑!\ } }
package blog;
public class Test {
public static void main(String[] args) {
Grandfather grandfather=new Grandfather();