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面向对象㈡ -- 继承与多态的更多相关文章

  1. java面向对象--继承与多态

    可以为一个变异单元中的每个类创建一个main方法,只有命令行所调用的那个类的main方法才会被调用,这样方便进行单元测试.继承时,一般将所有的数据成员都指定为private,将所有的方法指定为publ ...

  2. Java面向对象 继承(下)

     Java面向对象   继承(下) 知识概要:               (1)抽象类 1.1 抽象类概述                            1.2 抽象类的特点       ...

  3. Java面向对象 继承(上)

       Java面向对象 继承 知识概要:         (1)继承的概述 (2)继承的特点 (3)super关键字 (4)函数覆盖 (5) 子类的实例化过程 (6) final关键字 (1)继承 ...

  4. Java的继承和多态

    看了博客园里面的一个文章,关于java的继承和多态: class A ...{ public String show(D obj)...{ return ("A and D"); ...

  5. [转]Java中继承、多态、重载和重写介绍

    什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上 ...

  6. [ Java学习基础 ] Java的继承与多态

    看到自己写的东西(4.22的随笔[ Java学习基础 ] Java构造函数)第一次达到阅读100+的成就还是挺欣慰的,感谢大家的支持!希望以后能继续和大家共同学习,共同努力,一起进步!共勉! ---- ...

  7. java中继承和多态的理解

    继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父 ...

  8. JAVA 面向对象中的多态

    多态是继封装.继承之后,面向对象的第三大特性. 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态. Java作为面向对象的语言,同样可以描述一个 ...

  9. Java基础——继承和多态

    面向对象的编程允许从已经存在的类中定义新的类,这称为继承. 面向过程的范式重点在于方法的设计,而面向对象的范式将数据和方法结合在对象中.面向对象范式的软件设计着重于对象以及对象上的操作.面向对象的方法 ...

随机推荐

  1. leetcode 187. Repeated DNA Sequences 求重复的DNA串 ---------- java

    All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACG ...

  2. .lib文件 .h文件 .dll文件

    .lib代表的是静态数据连接库,在windows系统中起到链接程序和函数的作用,存放的是函数的是函数调用的信息,是obj文件的集合.相当于linux中的.a或.0. .so文件.lib文件是不对外公开 ...

  3. FizzBuzz 问题

    public class FizzBuzz { static int start = 1; static int end = 100; public static void main(String[] ...

  4. Combination Sum II

    public class Solution { public List<List<Integer>> combinationSum2(int[] candidates, int ...

  5. Next Permutation

    Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...

  6. Python使用re模块正则式的预编译及pickle方案

    项目上线要求当中有言论和昵称的过滤需求, 客户端使用的是python脚本, python脚本中直接利用re模块来进行正则匹配, 一开始的做法是开启游戏后, 每帧编译2条正则式, 无奈运营需求里面100 ...

  7. pwnable echo2

    pwnable echo2 linux 32位程序 涉及FSB和UAF漏洞的利用,先%x泄露地址,然后利用UAF漏洞进行利用 code:

  8. EditBox问题的实现以及Junit测试框架的简要说明

    一.这周的EditBox由一个框改为三个框,同时进行测试,下面给出程序及截图 1 import java.util.regex.Matcher; 2 import java.util.regex.Pa ...

  9. [原创]C++通用宏定义

    //单态模式(singletion) #defube DECLEAR_SINGLETION(ClassName) \ private: \ static ClassName* m_pInstance; ...

  10. Hive 中parse_url的使用

    1.Hive的parse_url函数 parse_url(url, partToExtract[, key]) - extracts a part from a URL 解析URL字符串,partTo ...