java复习(3)继承
一、继承为题的提出
----------------------------------------------------
我们知道面向对象的三大特性是:封装、继承和多态,可以知道继承在java应用中有多么的重要了。
下面我们先看一段代码:
Person代码:
package com.it18zhang; /**
* Created by stone on 2018/9/10.
*/
public class Person {
private String name;
private int age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}
Student代码:
package com.it18zhang; /**
* Created by stone on 2018/9/10.
*/
public class Student {
private String name ;
private int age ;
private String school; public String getSchool() {
return school;
} public void setSchool(String school) {
this.school = school;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}
从上面的代码可以看出,代码中存在大量的重复,而按照之前学习的,重复是不可能进行消除的
二、继承的概念:继承是面向对象最显著的一个特性,继承是从已有的类中派生出新的类,新的类能够吸收已有类的属性和行为,并能狗扩展新的能力,在java类中,如果要实现继承,可以使用如下的语法。
class 子类 extends 子类 {}
子类被称为派生类;父类称为超类;
观察继承的基本实现
class Person {
private String name;
private int age; public void setName(String name) {
this.name = name;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return this.name;
} public int getAge() {
return this.age;
}
} class Student extends Person { // Student类继承了Person类
} public class TestDemo {
public static void main(String args[]) {
Student stu = new Student(); // 实例化的是子类
stu.setName("张三"); // Person类定义
stu.setAge(); // Person类定义
System.out.println("姓名:" + stu.getName() + ",年龄:" + stu.getAge());
}
}
可以发现:子类并没有定义任何的操作,而主类中用的全部的操作都是由Person类进行定义的,这说明:子类即使不扩充父类,也能维持对父类的操作
1.多个类中存在相同的属性和行为的时候,将这些内容抽取到单独的一个类中,那么多个类无需再定义这些类和行为,只需要继承那个类就可以了;多个类可以成为子类,单独的这个类可以成为父类或者超类;子类可以访问父类中的非私有属性和行为;通过extends关键字让类与类之间产生继承关系。
2.继承的出现提高了代码的复用性,继承的出现让类与类之间产生了关系,提供了多态的前提。
3.继承的特点:java只支持单继承,不支持多继承
一个类只能继承一个父类,不可以有多个父类
class SubDemo extends Demo{} //ok
class SubDemo extends Demo1,Demo2......//error
java支持多层继承
class A{}
class B extends A{}
class C extends B{}
4.定义继承需要注意:
不要为了获取其他类的某个功能而去继承
类与类之间要有所属关系,xx1是xx2的一种关系
4.1super关键字
super和this的用法很像 ;this是本类对象的引用;super代表父类内存空间的标志;当字符类出现同名的成员的时候,可以用super进行区分。当子类调用父类构造函数的时候,可以使用super方法进行调用
4.2函数的覆盖:子类找那个出现父类中一模一样的方法时候,会出现覆盖操作,也称为重写或者复写
4.3父类中的私有方法不可以被覆盖;在子类覆盖的方法中,继续使用被覆盖的方法可以通过super.函数名进行获取
覆盖方法注意事项:覆盖的时候,子类方法权限一定要大于父类方法的权限;静态方法只能覆盖静态方法
4.5子类的实例化过程:子类中所有的构造函数默认都会访问父类的孔灿构造函数;因为每一个构造函数的第一行都有默认语句super();
4.6子类会具备父类的数据,所以先要确定父类是如何对这些数据进行初始化的。当父类中没有空参构造函数的时候,子类的构造函数必须通过this或者super语句指定要进行访问的构造函数
最新文章
- DGbroker三种保护模式的切换
- window操作技巧
- HDU_2041——走楼梯,递推
- 面向面试编程——javascript对象的几种创建方式
- Qt 的一些浅知识点
- android分包方案
- layui table分页 page为false时,limit问题
- System.Diagnostics.Process 测试案例
- Linux磁盘故障案例
- 【模板】Treap
- 抽屉之Tornado实战(4)--发帖及上传图片
- OpAmp Voltage Follower/Regulator
- js模板引擎之artTemplate
- chrome扩展安装图文教程
- Vue学习笔记:methods、computed、watch的区别
- C#数组的Map、Filter、Reduce操作
- C. Ayoub and Lost Array Round #533 (Div. 2) 【DP】
- 批量插入Oracle,遇到CLob字段慢的解决办法
- 从零开始一个http服务器(一)-开始
- 【BZOJ4108】[Wf2015]Catering 有上下界费用流
热门文章
- Express + Mongoose 极简入门
- 揭开HTTPS的神秘面纱
- 桥接模式下,主机能ping通虚拟机,虚拟机ping不通主机
- Java JDBC 基础
- shell脚本之awk、sed、grep案例
- Let a mthod in RestControl return a json string
- Android6.0运行时权限的处理Demo
- android:layout_gravity 和 android:gravity 的区别?
- 第五章 SpringCloud之Eureka-Client使用RestTemplate实现服务之间的调用
- CentOS定时备份MySQL数据库