java自学手记——继承
java面向对象三大特点封装、继承和多态。继承作为三大特点之一,主要是为了实现多态的,即多态的前提条件是继承。代码示例:
1 class Person{ 2 String name; 3 String age; 4 } 5 6 class Student extents Person{ 7 public void study(){ 8 System.out.println("学习"); 9 } 10 } 11 12 class Teather extends Person{ 13 public void teach(){ 14 System.out.println("教育"); 15 } 16 }
继承概述
代码中Student和Teacher都有共同的属性name和age,抽取共性之后得出一个父类Person,创建类的时候使用extends Person继承了父类Person中所有的属性(成员变量)和方法(函数),因此Student和Teacher都拥有name和age属性。继承的父类是抽取了子类的共性之后创建的,不能为了使用别的不具有继承关系的类中的属性或方法而随意使用继承。java可以多层继承,最低层的子类拥有整个继承体系中的所有属性和方法,但是Java不像C++一样支持多继承,即一个子类不能继承多个父类,避免因为父类中有相同的方法名时而使得子类调用时无法区分调用哪个父类的方法,但Java使用接口保留了这种多继承的体制。另外子类不能继承父类中被private关键字修饰的属性和方法。
子类中的成员变量、函数和构造函数
当子类中属性与父类的值不同时,会优先调用子类中的值,而不是直接继承父类中属性的值,比如:
1 class Person{ 2 String name="张三"; 3 } 4 5 class Student extends Person{ 6 String name = "李四"; 7 void show(){ 8 System.out.println(name); 9 } 10 } 11 12 public class Test{ 13 public static void main(String[] args){ 14 Student stu = new Student(); 15 stu.show(); 16 } 17 }
输出的结果为“李四”,而不是“张三”。即是在show方法内使用this关键字修饰name也是不能调用父类中的属性值的。如果想要调用父类中的name,可以使用super.name,就能使父类中的“张三”调用。不能在子类中直接给从父类中继承过来的变量赋值,否则系统会以为要定义新的子类变量而报错,赋值须在子类的方法中进行。
子类中的方法名和父类中的相同时,跟成员变量一样,优先调用的是子类中的方法,如同子类的方法覆盖了父类的方法,叫做方法的重写(覆盖),子类覆盖父类时,子类方法的访问权限必须大于或等于父类方法的访问权限,其中public>protected>default>private,而且静态的函数只能覆盖静态的。这里要区分两个概念:
重载:只看同名的方法的参数列表,参数列表不同的成为方法的重载。
重写(覆盖):子父类方法要一样,包括有无返回和参数列表。
子父类中的构造方法的特点:在对子类对象进行初始化的时候,父类的构造方法也会运行,因为子类构造方法默认第一行有一条隐式的语句 super();如:
1 class Person{ 2 String name; 3 Person(){ 4 System.out.println("我是父类构造方法"); 5 } 6 } 7 8 class Student extends Person{ 9 Student(){ 10 super(); //隐式 11 System.out.println("我是子类构造方法"); 12 } 13 } 14 15 public class Test { 16 public static void main(String[] args) { 17 Student stu = new Student(); 18 19 } 20 21 }
如果父类中重载了构造方法,使得构造方法有了参数,则子类调用是必须添加super(参数);否则会使用默认super(),因找不到参数而报错。
转载于:https://www.cnblogs.com/elecdog/p/4749313.html
java自学手记——继承相关推荐
- Java自学手记——多态
对象转型 学习多态前先明白一个叫对象转型的概念,如: 1 class Animal{ 2 void sleep(){ 3 System.out.println("睡觉"); 4 } ...
- Java自学手记——servlet3.0新特性
servlet3.0出来已经很久了,但市场上尚未普遍应用,servlet3.0有三个比较重要的新特性:使用注解来代替配置文件,异步处理以及上传组件支持. 支持servlet3.0的要求:MyEclip ...
- JAVA自学笔记24
JAVA自学笔记24 1.能使用同步代码块就使用同步代码块,除非锁对象是this,就可以考虑使用同步方法.静态方法的锁是类的字节码对象. 2.JDK5新特性 1)接口Lock void Lock()/ ...
- 《 郝斌 java自学视频 完结 》_《[郝斌]Java自学视频[完结]》AVI[压缩包]
中文名: [郝斌]Java自学视频[完结]资源格式: 压缩包版本: AVI发行时间: 2009年地区: 大陆对白语言: 普通话文字语言: 简体中文简介: 特别说明: 视频原始来源为互联网,原始格式为F ...
- 有什么好的Java自学教程视频,适合初学者
动力节点Java培训最新上线Java实验班,等你来测试自己适不适合学习Java编程哦! 随着互联网的发展,视频教程充斥着网络,很多人为了能够在视频教程中捞取一桶金,纷纷投入视频售卖的大军之中,其中不乏 ...
- JAVA自学笔记08
JAVA自学笔记08 1.构造方法私有,外界就不能再创建对象 2.说明书的制作过程 1)写一个工具类,在同一文件夹下,测试类需要用到工具类,系统将自动编译工具类:工具类的成员方法一般是静态的,因此在测 ...
- JAVA自学笔记23
JAVA自学笔记23 1.多线程 1)引入: 2)进程 是正在运行的程序.是系统进行资源分配和调用的独立单位.每一个进程都有它自己的内存空间和系统资源. 多进程: 单进程的计算机只能做一件事情,而现在 ...
- Java自学笔记——Java面向对象——04.抽象类、接口、内部类
Java 面向对象各节 Java自学笔记--Java面向对象--01.回顾方法 Java自学笔记--Java面向对象--02.构造器.类和对象 Java自学笔记--Java面向对象--03.封装.继承 ...
- 我与Java的故事以及0基础Java自学之路(2022最新版)
文章目录 我与Java的故事 一.JSP.Servlet推荐自学路线 二.Spring推荐自学路线 三 SpringMVC推荐自学路线 四 Mybatis.MyBatisPlus推荐自学路线 五 Sp ...
最新文章
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口调试...
- Internet Explorer 8 使用技巧(2):加速器
- 处理字符串_3_处理含引号的字符串
- java类怎么实例化_Java类的定义及其实例化
- 单模光电转换器怎么接_我对汽车电子电磁兼容测试实验室使用的光电收发器之使用管理方式的一些看法...
- C 多线程的互斥锁应用RAII机制
- jquery 特效专辑
- NUC1077 Humble Numbers【数学计算+打表+水题】
- 推荐系统数据稀疏性问题
- 集群环境下的文件上传和下载和文件服务器的配置
- 反病毒工具-LordPE
- 快用苹果助手安装失败_穿越火线辅助腾讯手游助手常见问题汇总
- 【合同】产品设计:ID与MD设计合同模板
- 从 SEC EDGAR 获取股东治理数据 (Shareholder Activism)
- 喜欢“唱跳rap和篮球”的不止有蔡徐坤,还有周杰伦,他可是唱跳rap的鼻祖
- linux 服务器远程开机,Linux 下实现远程开机
- Unable to acquire the dpkg frontend lock
- dbus-1 not met问题
- 微信视频号绑定公众号教程分享
- Apache Kylin(一)
热门文章
- java oracle 建表语句_在oracle数据库中创建表语句如何写?
- 9个元素换6次达到排序序列_一文带你读懂排序算法(三):堆排序算法
- Java多线程闲聊(三):RxJava
- 函数式编程——做到并发,不可变数据修改就只能复制后修改返回
- WAF——针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入、XSS跨站、Webshell上传、命令注入、非法HTTP协议请求、非授权文件访问等...
- SQL group by底层原理——本质是排序,可以利用索引事先排好序
- sphinx索引文件进一步说明——最好是结合lucene一起看,直觉告诉我二者本质无异...
- numpy 深复制 切片创建视图
- web3.js(二)根据私钥推出地址查询以太数量
- AJAX(二)jquery ajax