码迷,mamicode.com
首页 > 编程语言 > 详细

Java面向对象㈡ -- 继承与多态

时间:2014-08-02 20:44:13      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   java   io   问题   ar   div   

Java的继承是通过extends和implement来实现的,Java不支持多继承,但是Java支持多层继承以及多实现(接口)。
Java继承有一个关键字super是用来指向父类。Java继承衍生出覆盖的概念。覆盖被用来支持多态。
实际开发中Java通常继承于抽象类,实现于接口。如果不希望一个类被继承,或者一个方法被覆盖,或者一个成员变量被改变,就可以用final修饰。
这里只说明两个问题:
1,重载和覆盖的区别
重载和覆盖的区别:
重载发生在同一个类之中,重载要求函数名相同,参数不同(参数个数||参数类型||参数顺序)。特别的函数的返回类型不影响重载。
覆盖发生在父子类之间,覆盖同样要求函数名相同,并且参数也相同。覆盖遵循“两同两小一大”的原则。
两同是即是函数名和参数是相同的;两小是抛出的异常更小或相同,返回类型更小或相同;一大是访问权限更大或相同。
构造函数和静态方法支持重载,但是不可以被覆盖。(构造方法和static的相似性,也可以联系到private和final关键字也有此相似性)
2,抽象类和接口的区别
在设计理念上,一个类只能继承一个抽象类,但是可以实现多个接口。抽象类和子类的关系是is a,而接口则是like a。这样抽象类含有构造方法,而接口是没有构造方法的。

抽象类可以含有普通成员变量和非抽象的方法,而接口的成员变量和方法都有固定的修饰。即:public static final 和 public abstract。对于继承者来说,抽象类的方法子类可以不全部复写,但是接口的方法抽象类是必须全部复写的。
抽象类也可以implements接口,可以实现接口中的方法,也可以不实现。抽象类不可以被final修饰。抽象类可以包含非抽象方法。

 

Java的多态实现在继承的基础上,多态就是父类引用指向子类对象。多态的实现依靠于子类的覆盖父类方法。因为覆盖是动态绑定,是受RTTI约束的。RTTI(run time type identification,运行时类型检查)。
这里需要提到一个隐藏的概念,子类继承父类时,在子类可以覆盖父类的方法的情况下,子类对父类的属性和静态类型,是不支持覆盖的。这里仅仅只能理解为隐藏。隐藏并不是覆盖。

class Fu{
 int i = 1;
 static String name = "name ... fu";
 static void say(){
  System.out.println("say ... fu");
 }
 void listen(){
  System.out.println("listen ... fu");
 }
}
public class Demo1 extends Fu{
 int i = 2;
 static String name = "name ... zi";
 static void say(){
  System.out.println("say ... zi");
 }
 void listen(){
  System.out.println("listen ... zi");
 }
 public static void main(String[] args) {
  Fu f = new Demo1();
  System.out.println(f.i);
  f.say();
  f.listen();
 }
}

输出:
1
say ... fu
listen ... zi

Java面向对象㈡ -- 继承与多态,布布扣,bubuko.com

Java面向对象㈡ -- 继承与多态

标签:style   blog   color   java   io   问题   ar   div   

原文地址:http://www.cnblogs.com/shuaixianbohou/p/3887347.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!