Java 继承(inheritance)是 Java 面向对象的三大重要特性之一(封装-encapsulation,   继承-inheritance,  多态-polymorphsim)   Java 继承很好的管理了具有相似特征的类之间的关系(主要集中在成员变量、方法),  使程序可扩展、易修改,并且成为java多态的基础。下面将介绍Java继承的基本语法以及特性:

1.  使用extends关键字实现类与类之间的继承

public class parent {}public class child extends parent {}

在这段代码中,我们首先声明了一个名叫parent的类。然后声明了一个child类extends parent类作为parent的子类,这时候parent类就被用作了父类(super class)。事实上,任何类都可以被用作父类,只要我们为其声明子类,不管它是否是抽象类(abstract class)。 在我们不重写(overwrite) 或重载(override)父类中的方法、不增添新的方法、不更改原始的成员变量或增加新的变量的情况下,子类将默认保留父类的特性。

2.  关于抽象类的继承

对于一个抽象类,如果里面包含有未实现的抽象方法并且我们想创造一个子类继承这个抽象类,这个子类不必重写(overwrite)抽象类中所有未实现的抽象方法,但是必须被定义为抽象类。同理,如果一个类实现一个接口(Interface),那么它要么重写接口里的所有抽象方法,要么被定义为抽象类。

3. 关于父类与子类构造器的调用

父类与子类均为默认构造器:

public class parent {}public class child extends parent {}

在如上代码中,父类与子类均调用super class Object的构造器(constructor)。 需要注意的是,当我们使用“new”关键字新建子类child对象时,同时会调用父类parent的构造器并新建一个父类对象(parent对象)

父类与子类均不为默认构造器:

public class parent{public parent (int m) {}
}public class child extends parent {public child (int m, String a) {super(m);}
}

在这种情况下,子类必须重写(overwrite)或重载(override)父类的构造函数,同时必须调用父类的构造器(constructor),因为父类不再有默认的构造器可供调用。

4. Java单继承的特性

在java中,一个父类被多个子类继承,但一个子类只能继承一个父类。与接口不同的是,一个类可以实现(implement)多个接口。

5. 创建子类或父类的对象

我们看下面这段代码:

public class demo {public static void main (String[] args) {parent p = new parent();child c = new child();parent pc = new child();}
}public class parent {}public class child extends parent {}

对于main方法中的前两行,我们可以很容易的看出它新建了一个子类的对象和一个父类的对象,对于第三行这种,叫做父类的引用指向子类的对象,我们下边分别来分析对于三种声明的成员变量和方法的调用。

实例方法(instance method)和实例变量(instance method)的调用:

针对p和c,这个类里面有什么实例方法和实例变量,那么就允许调用什么

针对pc,编译器首先会在父类中进行搜索,如果搜索到,则不会报错,此时再去看子类中有没有重写此方法或改变此变量。如果有,则调用子类的。如果被调用的方法或变量只在子类中有而在父类中没有,那么编译器会报错。

静态方法(static method)和静态变量(static variable)的调用:

针对p和c,这个类里面有什么实例方法和实例变量,那么就允许调用什么

针对pc,同理,只有在父类中存在,编译器才不会报错。但是,即使子类重写了父类的静态方法,调用时依然会使用父类的静态方法(在理论上,不建议通过objectName.method或objectName.variable的方式调用静态方法或变量,最好使用className.method或className.variable的方法调用)

Java 多态


多态是同一个行为具有多个不同表现形式或形态的能力。

多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:

对于多态,可以总结以下几点:

一、使用父类类型的引用指向子类的对象;

二、该引用只能调用父类中定义的方法和变量;

三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用);

四、变量不能被重写(覆盖),"重写"的概念只针对方法,如果在子类中"重写"了父类中的变量,那么在编译时会报错。

类的属性变量是能重写(覆盖)

class Animal{public int age;public void move(){System.out.println("动物可以移动");}
}class Dog extends Animal{public double age;public void move(){age = 10.00;System.out.println("狗可以跑和走");}public void bark(){System.out.println("狗可以吠叫");}
}class Cat extends Animal{public void move(){super.age = 3;System.out.println("猫可以跳");}
}public class TestOverride{public static void main(String args[]){Animal a = new Animal(); // Animal 对象Animal b = new Dog(); // Dog 对象Dog c = new Dog();Cat d = new Cat();a.move();// 执行 Animal 类的方法b.move();//执行 Dog 类的方法c.move();//执行 Dog 类的方法d.move();//执行 Cat 类的方法Object aValue = a.age;Object bValue = b.age;Object cValue = c.age;System.out.println("The type of "+a.age+" is "+(aValue instanceof Double ? "double" : (aValue instanceof Integer ? "int" : "")));System.out.println("The type of "+b.age+" is "+(bValue instanceof Double ? "double" : (bValue instanceof Integer ? "int" : "")));System.out.println("The type of "+c.age+" is "+(cValue instanceof Double ? "double" : (cValue instanceof Integer ? "int" : "")));// 覆盖age属性System.out.println("The age of cat  is "+d.age);}
}

编译值:

动物可以移动
狗可以跑和走
狗可以跑和走
猫可以跳
The type of 0 is int
The type of 0 is int
The type of 10.0 is double
The age of cat  is 3

2018.3.8学习心得相关推荐

  1. 我在51CTO微职位学软考——2018网规学习心得

    我在51CTO微职位学软考--2018网规学习心得 - 2018年7月报班学习软考网络规划师,想通过考试获得高级职称的资格,也是对自己技术的一种肯定吧.虽然说国家的资格证书或许在小公司作用不大,但是稍 ...

  2. 2018年前端学习心得——总结篇

    学习 2018年,确定了人生的职业规划,开启了前端之路.基础不存在的,本科所了解的HTML标签和简单CSS样式早就不存在了.下面简单总结一下这一年的收获与进步. 自我学习(3个月):前端基础知识,在图 ...

  3. 2018/11/13 学习心得随手记

    文章目录 windows环境下nginx 本地反向代理和相关http常规配置 Nginx 简介 常用功能 下载安装nginx 命令行启动.关闭.重启nginx 简单的本地反向代理 http常规配置 w ...

  4. 学计算机英语的心得体会,英语学习心得体会

    英语是我们大部分人学习的外国语言,学习过后,很多人都会有心得,下面是由出国留学网的小编为您整理的"英语学习心得体会范文2018",仅供参考,一起来看看吧. 英语学习心得体会范文20 ...

  5. java类的心得_java面向对象学习心得3篇

    日记网 >> 专题 java面向对象学习心得3篇 更新时间:2018/6/15 8:27:00  点击率:937  手机版 java面向对象学习心得3篇来自简单日记网精选推荐.在面向对象的 ...

  6. 巴菲特致股东的一封信:2012年 和学习心得

    原文请参考:http://www.berkshirehathaway.com/letters/2014ltr.pdf 学习心得: 主业运营良好: 对外投资的四大股票: 伯克希尔的四大投资-- 美国运通 ...

  7. 转‘ROS学习心得——安装篇——ROS安装’

    ROS学习心得--安装篇--ROS安装 FOR THE SIGMA FOR THE GTINDER FOR THE ROBOMASTER 简介: ROS(Robot Operating System) ...

  8. ROS学习心得——安装篇——ROS安装

    ROS学习心得--安装篇--ROS安装 FOR THE SIGMA FOR THE GTINDER FOR THE ROBOMASTER 简介: ROS(Robot Operating System) ...

  9. 【一周课表 · 中秋献礼9.2折】 第四期 认证考试、java、python、php、移动开发、系统运维、区块链 【分享学习心得得技术图书/定制T恤/购课券/会员券】)

    [一周课表]: [一周课表]是CSDN学院新推出的学习专栏节目,目的在于带领大家能够一起学习一些课程,认真学习的学员会收到CSDN学院发出的奖励小礼品:技术图书/CSDN学院定制T恤. 规则:在下方评 ...

最新文章

  1. 查找字符串末尾含关键字_Excel教程:用find函数带关键字提取杂乱文本
  2. 为什么只有128KB的魂斗罗,可以那么长的剧情?
  3. svn update -r m path 代码还原到某个版本(这样之前的log日志也就没了,也就是清空log日志)...
  4. [JavaScript] FireBug 调试
  5. CentOS7.0安装Nginx 1.7.4
  6. 崭新的2020(洛谷P5886题题解,Java语言描述)
  7. java中双引号和单引号_Java中的单引号和双引号之间有区别吗?
  8. MVC:感觉用户认证标识(IsAuthenticated)有点延时。
  9. evb测试板_DVT测试方案
  10. Nginx 常见应用技术指南
  11. 110 同步、异步、阻塞、非阻塞
  12. 让选择更具明确性:土方计算方法的选择——方格网or三角网
  13. 小米笔记本桌面计算机图标,小米笔记本桌面锁定怎么解除
  14. 【java】java如何保留时分秒存取mySql中的datetime类型数据的方法 及 显示时间与数据库存放时间相差n小时的解决方法
  15. 搞独立运动,万人如海一身藏
  16. js计算日期差;js计算天数差
  17. 处理unity第一第三人称游戏中的摄像机穿墙的问题
  18. 移动端下载xls文件
  19. 调用Java API发送传真
  20. jQuery Ui Tabs插件使用问题记录

热门文章

  1. MATLAB Simulink模块库详解(二)Sinks篇
  2. 上班可以摸鱼了,刚刚发现在VScode中可玩魂斗罗,超级玛丽,附详细攻略
  3. Oracle根据行号达到分组排序取第一条的效果,排序后取第一条
  4. 烤瓷牙价格悬殊的原因是什么?
  5. C语言学习笔记(9)之C语言的组成
  6. Java高并发 - JUC
  7. 数学-求和符号的性质
  8. ATSM中医疗相关的资料
  9. 工作小帮手--推荐软件
  10. visual studio比较文件差异(diff操作)