提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

前言

一、今日回顾

1.《高等数学》:一节网课

2.阅读:《费马大定理》300页

3.英语:120个单词

二、编程的那些事

1.继承的描述

2.继承的优缺点

3.继承的访问特点

4.super关键字在继承中的使用

5.继承中构造方法的访问特点

6.继承中成员方法的访问特点

总结


一、今日回顾

1.《高等数学》:一节网课

2.阅读:《费马大定理》300页

3.英语:120个单词

二、编程的那些事

1.继承的描述

继承是面向对象三大特征之一。可以使得子类具有父类的属性和方法。还可以再子类中重新定义,追加属性和方法。继承是java程序设计的一项核心技术。

继承的模板(格式)

  • public class 子类名extends父类名{}

注:    extends是java中的一个关键字

public  class Fu {public  void method(){System.out.println("Fu method");}
}
public class Zi extends Fu {public void show(){System.out.println("你好");}
}

public class Demo {public static void main(String[] args) {//Fu f=new Fu();Zi z=new Zi();z.show();z.method();}
}

2.继承的优缺点

继承优点:
●提高了代码的复用性(多个类相同的成员可以放到同一个类中)
●提高了代码的维护性(如果方法的代码需要修改, 修改-处即可)
继承缺点:
●继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟着变化,削弱了子类的独立性

什么时候使用继承?
●继承体现的关系: isa
●假设法:我有两个类A和B,如果他们满足A是B的一种,或者B是A的一种,就说明他们存在继承关系,这个时候就可以考虑
使用继承来体现,否则就不能滥用继承
● 举例:苹果和水果,猫和动物,猫和狗

3.继承的访问特点

先看例子:

public  class Fu {
// 父类只定义一个age 成员变量public int age=40;
}
//子类继承父类,定义一个变量,一个方法,方法里输出两个变量的值
//age是父类的成员变量,height是子类中的成员变量public class Zi extends Fu {public int height=175;public void show(){System.out.println(age);System.out.println(height);}
}
public class Demo {public static void main(String[] args) {//Fu f=new Fu();Zi z=new Zi();z.show();}
}


之后,改一下子类中的代码,Fu类和Demo类保持不变。

public class Zi extends Fu {public int height=175;//子类加多了一个公有的成员变量agepublic int age=20;public void show(){System.out.println(age);System.out.println(height);}
}

age的输出值变为了20,不再是40。再改动一下,改动如下:


public class Zi extends Fu {public int height=175;public int age=20;public void show(){//show方法里加了一个名为age局部成员变量int age=30;System.out.println(age);System.out.println(height);}
}

由此,可以得出继承中变量的访问特点

子类局部范围>子类成员范围>父类成员范围

注:如果在这些范围找不到,就会报错。

4.super关键字在继承中的使用

public  class Fu {
// 父类只定义一个age 成员变量public int age=40;
}
public class Zi extends Fu {public int age=20;public void show(){int age=30;System.out.println(age);
// 加入this.age输出的即是本类的成员变量System.out.println(this.age);// 加入super.age输出的即是本类的成员变量System.out.println(super.age);}
}
public class Demo {public static void main(String[] args) {Zi z=new Zi();z.show();}
}

小结:

  • this:代表本类的引用(this关键字指向调用该方法的对象,一般我们是在当前类中使用this关键字,所以常说this代表本类的引用)
  • super:代表父类存储空间的标识

注:有些人认为super与this引用是类似的概念,实际上,这样比较并不太恰当。这是因为super不是一个对象的引用,不能将super赋给另一个对象变量,它只是一个指示编译器调用超类方法的特殊关键字。

5.继承中构造方法的访问特点

public  class Fu {public Fu(){System.out.println("Fu中无参构造方法被调用");}public Fu(int age){System.out.println("Fu中带参构造方法被调用");}
}
public class Zi extends Fu {public Zi(){System.out.println("Zi中无参构造方法被调用");}public Zi(int age){System.out.println("Zi中带参构造方法被调用");}
}
public class Demo {public static void main(String[] args) {Zi z=new Zi();//     Zi z2=new Zi(20);}
}

问题1:为何创建Zi类对象调用Zi类无参构造的前面调用了Fu类的无参构造方法?(Fu类的无参构造方法为什么会被调用,且在Zi类无参构造的前面调用)

把代码中的注释取消,运行得到

继承中构造方法的访问特点
子类中所有的构造方法默认都会访问父类中无参的构造方法
为什么呢?
●因为子类会继承父类中的数据, 可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化
每一个子类构造方法的第一条语句默认都是: super()

如果父类中没有无参构造方法,只有带参构造方法,怎么办呢?

  • 通过使用super关键字显示的调用父类的带参构造方法
  • 在父类中自己提供一个无参构造方法

推荐:自己给出无参构造方法

67.继承中成员方法的访问特点

public  class Fu {public void show () {
//super.show();System.out.println("Fu中show方法被调用");}}
public class Zi extends Fu {public void method(){System.out.println("Zi中method()方法被调用");}//    public void show(){
//        System.out.println("Zi中show()方法被调用");
//    }
}
public class Demo {public static void main(String[] args) {Zi z=new Zi();z.method();z.show();}
}

将Zi类中show方法中注释的代码取消掉,运行得

       //在Zi类的show方法中加一个方法super.show();

小结:继承中构造方法的访问特点

通过子类对象访问一个方法

子类成员范围>父类成员范围

注:如果没有,就会报错

7.方法重写

概述:子类中出现了和父类一模一样的方法声明

应用:

  • 当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样既沿袭了父类的功能,有定义了子类特有的内容。
public class Phone {public void call(String name){System.out.println(name);}
}
public class NewPhone extends Phone{@Overridepublic void call(String name) {super.call(name);System.out.println("重写方法,加入新的功能");}
}
public class PhoneDemo {public static void main(String[] args) {Phone p=new Phone();p.call("book");NewPhone newPhone=new NewPhone();newPhone.call("glass");}
}

方法重写注意事项:

  • 私有方法不能被重写(父类私有成员子类是不能被继承的)
  • 子类方法访问权限不能更低(public>默认>私有)

总结

以上就是对于继承的理解,书写是为了更好的思考。

面向对象三大特性(继承)相关推荐

  1. 面向对象三大特性 -- 继承,封装,多态

    继承: 1.继承是面向对象程序设计能够提供软件开发效率的重要原因之一: 2.继承是具有传递性的: 3.继承来的属性和方法时隐式的,也就是在本类里面是看不见的: 4.一个类只能有一个父类,也就是只能单继 ...

  2. php面向对象三大特性——继承

    继承 概念:如果一个类有子类,那么该子类会继承父类的一切东西(私有成员访问不到) 在定义子类的时候需要加一个关键字:extends 特点:单继承,一个儿子只能有一个父亲,一个类只能有一个父类 如果父类 ...

  3. python面向对象三大特性

    python面向对象三大特性 继承,封装,多态 1.封装 体现在两个方面: 将同一类方法封装到了一个类中 将数据封装到对象中,在实例化对象时,可以通过__init__初始化方法在对象中封装一些数据,便 ...

  4. Python OOP:面向对象三大特性(封装、继承、多态)、类属性和实例属性、类方法@classmethod、静态方法@staticmethod、函数和类callable、__call__

    一.面向对象三大特性 二.多态 定义:多态是⼀种使⽤对象的⽅式,⼦类重写⽗类⽅法,调⽤不同⼦类对象的相同⽗类⽅法,可以产⽣不同的执⾏结果. 一个父类,可以继承给多个子类,每个不同的子类可以创建多个对象 ...

  5. 【职坐标】java面向对象三大特性(二)——继承详解

    [职坐标]java面向对象三大特性(二)--继承详解 a) 什么是继承? i. 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可 b) ...

  6. 大数据必学Java基础(四十):面向对象三大特性之一继承(Inheritance)

    文章目录 面向对象三大特性之一继承(Inheritance) 一.列举案例说明 1.类是对对象的抽象

  7. java 面向对象三大特性之继承 万字详解(超详细)

    目录 前言 : 一.为什么需要继承: 二.什么是继承(Warning : 篇幅较长)? 1.继承概述: 2.子类继承父类之后达到的效果 : ①如何使用继承? ②代码演示 : 3.继承的使用场景: eg ...

  8. CPPDay05 C的静态成员,类的静态成员,单例模式,静态成员函数,继承(面向对象三大特性,高类聚,低耦合),继承方式(private,protected,public)多重复杂继承,虚继承

    目录 0x00 C中的静态成员: 0x01类的静态成员: 0x02单例模式: 0x03静态成员函数: 0x04继承: 0x05继承方式: 0x06多重复杂继承: 0x07虚继承: 0x00 C中的静态 ...

  9. 【Python学习笔记】面向对象三大特性

    2019独角兽企业重金招聘Python工程师标准>>> ★面向对象:封装.继承和多态是面向对象的三大特点★ 面向对象编程简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元 ...

  10. python 面向对象(三大特性)

    python 面向对象(初级) (思维导图 ↑↑↑↑↑) 概述: 面向过程:根据业务逻辑从上到下垒代码. 函数式:将某功能代码封装至函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类 ...

最新文章

  1. python【力扣LeetCode算法题库】225-用队列实现栈
  2. ElementUI的el-form表单验证报错[Element Warn][Form]model is required for validate to work!
  3. 分区表学习一:分区表介绍
  4. api 规则定义_API有规则,而且功能强大
  5. 前端学习(3255):react中动态初始化结果
  6. 项目架构开发:数据访问层之Cache
  7. 数据分析实战之自如房租分析
  8. 系统架构----(1) 负载均衡
  9. window下rails4.1 发生TZInfo::DataSourceNotFound 错误
  10. 51Nod1019----归并排序(递归)
  11. eclipse中tomcat能正常启动,但是访问不了tomcat首页(问题解决)
  12. SpreadJS 14.1 Crack by Xacker
  13. 优化理论10----约束优化的罚函数法、外点法(Penalty method)、内点法(**Barrier Methods**)、混合惩罚函数法
  14. 【其他】VirtualBox压缩磁盘占用空间
  15. Flask的大型网站模板
  16. monkey自动化测试脚本
  17. lv6 网络编程(9)-网络编程扩展下
  18. 区分C语言中的*(p++), *p++, (*p)++, *(++p), *++p
  19. powerdesigner 导入sql文件生成模型
  20. 智慧小区智慧物业管理系统一体化解决方案

热门文章

  1. 详解one—hot编码(独热编码)
  2. java线上培训机构排名前十,重要概念一网打尽!
  3. Matlab将连续图片处理为视频
  4. 蓝桥杯单片机第十届省赛题程序实现
  5. 1.8 Illustrator标尺的使用 [Illustrator CC教程]
  6. spring redis executePipelined
  7. File.separator 详解
  8. H.265网页播放器EasyPlayer获取视频流正常,但是播放出现黑屏是什么原因?
  9. 怎么在网站中建立一个问答页面(FAQ)?
  10. tensorflow function笔记: tf.tile