继承关系与接口

来源:互联网 发布:linux下cat命令详解 编辑:程序博客网 时间:2024/05/17 03:14

以前自己了解过继承,对很多概念总是特别模糊,今天听了左哥的讲解后,清晰了很多,下面谈谈我的理解:

继承简单来说就是子类继承父类的东西,为什么要用继承,用继承有什么好处呢?假如一个类中有很多属性和方法,而此时另一个类中也需要该类中的很多属性和方法,如果重新写会因为代码较多觉得比较麻烦,这时就可以采用继承,继承的方式为:子类  extends  父类,这样子类就可以直接使用父类中的属性和方法了,但是要注意,子类通过继承关系只能获取父类的非私有权限的属性和方法。如果父类当中有抽象方法,则子类必须重写父类中的抽象方法,当普通类继承抽象类的时候,需要重写抽象类中的抽象方法,一个子类只能继承一个父类,这叫做单继承,而一个父类可以被多个子类继承,这很好理解,一个人只能有一个父亲,而一个父亲可以有多个孩子。


对于继承接口,我们用关键字implements,即:子类 implements 父类,由于接口里全是抽象方法,所以如果是普通类继承接口,则必须重写接口中的所有方法;如果是抽象类继承接口,则可以不用全部重写接口中的方法,因为抽象类中也可以存在抽象方法。一个类可以继承多个接口。

上面提到方法重写,那么为什么要重写呢?举个例子:当一个普通类从抽象类或者接口中继承时,当然会把他们中的抽象方法继承过来,而普通方法中不能有抽象方法,所以必须进行重写,将抽象方法重写成普通方法,重写时,子类的方法名、参数、返回值必须和父类继承过来的方法一致,不同的是自己添加方法体。


自动转型:即子类对象自动转为父类类型。

class A extends BB  a = new A
从上面的代码可知,A类继承了B类,实例化A 类的时候本应该是A a =new A ,而A是B的子类,故A 的对象a可以自动转型为父类B,所以就成了B a = new A。注意一点,转型后的对象,如果子类重写了父类方法,则执行的仍然是重写后的。


多态是一种现象:即同一个类型的对象,执行同一个方法,执行过程不一样。如下面的程序:

public class People {public void study(){System.out.println("人类在学习");}public void play(){System.out.println("人类在玩");}}
public class Student extends People{public void study() {System.out.println("学生在认真的学习");}}
public static void main(String[] args) {People peo = new Student();//自动转型Student stu = new Student();People peo1 = new People();peo.study();stu.study();peo1.study();}


上面程序执行的结果为:

       学生在认真的学习

       学生在认真的学习

      人类在学习


上面代码中peo和peo1都是People类的对象,都是执行study()方法,最后的过程和结果却不一样,这就是多态现象。


构造函数: 形式为:   访问权限  类名(){}         构造函数的作用是用来构造对象,在创建对象的时候执行,并且具有返回值,返回的是对象在内存中的地址。


方法重载:方法重载需要满足以下条件:1.在一个类中      2.方法名相同       3.参数类型、参数个数、参数顺序不一样的方法互为重载方法。

      满足上面条件的方法互为重载方法,当然,构造方法也可以重载:如果重载了构造函数,则类中默认的构造方法没有了,如果还需要用到无参的构造方法,则必须显

                   性定义在类中。

<span style="white-space:pre"></span>public void study(){System.out.println("学生在学习");}
public void study(int a){System.out.println("学生在学习2");}
public void study(int c,int d){<pre name="code" class="java"><span style="white-space:pre"></span>System.out.println("学生在学习3");
}

public void study(String str){System.out.println("学生在学习4");}
public void study(int a,String b){<pre name="code" class="java"><span style="white-space:pre"></span>System.out.println("学生在学习5");
}
public void study(String b,int a){<pre name="code" class="java"><span style="white-space:pre"></span>System.out.println("学生在学习5");
}
由定义可知:同一个类中以上方法互为重载方法。




0 0