Java:[面向对象:继承,多态]
本文内容:
- 继承
- 多态
首发时期:2018-03-23
继承:
介绍:
- 如果多个类中存在相同的属性和行为,可以将这些内容抽取到单独一个类中,那么多个类(子类)无需再定义这些属性和行为,只要继承那个类(父类/超类/基类)即可。【比如,泰迪狗类也是狗类,狗的属性,泰迪狗也应该是有的,那么泰迪狗类在定义的时候就不必要添加那些与狗类重复的属性了,而是直接继承狗类即可。在多个狗类的子类(泰迪狗,二哈,柴犬)的时候,直接继承狗类可以省去很多代码,提高代码复用性。】
- 继承关系是通过extends来产生的,继承的格式:class 子类名 extends 父类名{}
- 子类可以直接访问父类中的非私有的属性和行为(因为私有的并非子父类共性属性、行为,父类并不一定只包含父子类共有的属性,还会包含自己应该有的属性,比如虽然哺乳类跟人类是父子类关系,但我们都能清楚,哺乳类有一些特别的特征我们人类是没有的)
- 继承的出现让类与类之间产生了关系,为第三个特征多态提供了前提。
- JAVA只支持单继承,不能有多个父类,但支持多实现(接口)(多继承可能因为多个父类中有同名变量或函数而发生调用的不确定性)
- JAVA支持多层继承
- 当子父类不同包时,子类无法继承父类的友好变量(默认无权限修饰),只能继承public 或 protected的。
class Person{
String gender="unknown";//为了测试继承,先赋值
int age;
String family_address;
private String children;
}
class Student extends Person{
}
public class Demo {
public static void main(String[] args) {
Student st=new Student();
System.out.println(st.gender);//unknown
// System.out.println(st.children);//报错,children是父类私有
}
}
继承中的构造函数:
- 默认是有调用父类的构造函数的,如果想要显式调用父类的构造函数,可以使用super(参数列表)
- 为了测试有默认super()的例子
- 显示调用构造函数的例子:
- 注意:默认的super()在第一行,而用this调用构造函数时也必须在第一行,那么super()会默认在最终调用的构造函数的第一行。
class Person{
String gender="unknown";//为了测试继承,先赋值
int age;
String family_address;
private String children;
Person(){
System.out.println("为了测试默认有super()");
}
}
class Student extends Person{
}
public class Demo {
public static void main(String[] args) {
Student st=new Student();
}
}
-------------------结果:
为了测试默认有super()
class Person{
String gender;
int age;
String family_address;
private String children;
Person(String gender,int age,String family_address){
this.gender=gender;
this.age=age;
this.family_address=family_address;
}
}
class Student extends Person{
Student(String gender,int age,String family_address){
super(gender,age,family_address);
}
}
public class Demo {
public static void main(String[] args) {
Student st=new Student("男",18,"M78星云");
System.out.println(st.gender+st.family_address);//男M78星云
}
}
继承中成员变量的隐藏和方法的重写:
- 对于子类中继承父类的成员变量,只要子类中对于同名的成员变量进行私有化,便能隐藏父类的成员变量。 【如果只是子类的成员变量是可见的,那么直接定义同名变量覆盖父类变量即可】

- 方法重写/覆盖:重写父类方法的时候不能降低方法的访问权限,也不能改变static修饰符。 【子类重写后的方法的权限必须大于等于父类的,非静态不能覆盖静态的,静态只能覆盖静态的】
- 重写就是子类中定义与父类中已有函数同名的函数,那么这个子类中的函数就将父类的函数覆盖了(不影响其他子类),当调用函数时,是调用子类中的该函数,而不是父类的。

- 如果想要使用被覆盖了的父类方法,要添加super
package 重写;
class Person{
void show() {
System.out.println("run in Fu");
}
}
class Student extends Person{
void show() {
System.out.println("override in Zi");
super.show();
}
}
public class Demo {
public static void main(String[] args) {
Student st=new Student();
st.show();
//结果:override in Zi
//run in Fu
}
}
注意:
- 当子父类出现同名变量,用super来区分
- 子类无法重写父类的private方法
- 用super.XXX来显式获取父类的成员变量或调用父类的方法
多态:
介绍:
- 指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。【或者说指父类的某个方法被子类重写时,可以各自产生自己的功能行为。】
- 一种体现是函数的重载;一种体现是函数的重写。
- 另一种一种显示形式:向上转型,子类转成父类对象,比如:

- 上转型对象不能操作子类新增的函数,但可以调用子类继承的成员变量或继承或重写的函数【注意的是不能调用子类隐藏父类的成员变量】。
使用:
向上转型:
package 多态_usage;
class Animal{
int age=4;
void show() {
System.out.println("run in Fu");
}
}
class Tiger extends Animal{
int age=6;
void show() {
System.out.println("ao ao ao");
}
}
class Cat extends Animal{
void show() {
System.out.println("miao miao miao");
}
}
public class Demo2{
public static void main(String args[]) {
Animal a=new Tiger();//把老虎转型成父类-动物
Animal b=new Cat();
System.out.println(a.age);//4
a.show();//run in Zi
b.show();//miao miao miao
}
}
注意:
成员变量子父类同名时,成员变量的调用看“.”所属的对象的类。比如是父类.成员变量那么就是父类的。
Java:[面向对象:继承,多态]的更多相关文章
- Java面向对象 继承(下)
Java面向对象 继承(下) 知识概要: (1)抽象类 1.1 抽象类概述 1.2 抽象类的特点 ...
- Java面向对象 继承(上)
Java面向对象 继承 知识概要: (1)继承的概述 (2)继承的特点 (3)super关键字 (4)函数覆盖 (5) 子类的实例化过程 (6) final关键字 (1)继承 ...
- Java开发知识之Java的继承多态跟接口*
Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...
- Java面向对象之多态(来源于身边的案例)
2019年1月3日 星期四 Java面向对象之多态(来源于身边的案例) 1. 为什么要用多态? 1.1 多态是面向对象的三大特性之一 1.2 多态是基于接口设计的模型 1.3 多态具有横向扩展特性 1 ...
- Java面向对象㈡ -- 继承与多态
Java的继承是通过extends和implement来实现的,Java不支持多继承,但是Java支持多层继承以及多实现(接口).Java继承有一个关键字super是用来指向父类.Java继承衍生出覆 ...
- Java面向对象的多态
Java中多态的概念是面向对象中除封装和继承外非常重要的知识点,也是Java面向对象三大特性最后一个特性 多态其实就是指对象存在的多种形态,多态分为引用多态和方法多态 引用多态的含义就是:父类的引用可 ...
- java面向对象之 多态 Polymorphism
多态(Polymorphism):用我们通俗易懂的话来说就是子类就是父类(猫是动物,学生也是人),因此多态的意思就是:父类型的引用可以指向子类的对象. 1.多态的含义:一种类型,呈现出多种状态 主要讨 ...
- Java 封装 继承 多态
Java 继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法 ...
- java面向对象--继承与多态
可以为一个变异单元中的每个类创建一个main方法,只有命令行所调用的那个类的main方法才会被调用,这样方便进行单元测试.继承时,一般将所有的数据成员都指定为private,将所有的方法指定为publ ...
- Java面向对象特性--多态
Java是一种面向对象的编程语言,面向对象的三大特性就是继承,封装,多态.下面细细说一说多态. 多态的定义:一个事物的多种形态,指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而 ...
随机推荐
- centos7防火墙管理的变化
当我们在centos7中输入service iptables status 查看系统的防火墙状态,会出现如下错误: 网上查阅才知道centos7的防火墙管理工具变了,原来的iptables已经不用了, ...
- mysql常用function
前言: 本文主要是参考mysql官方文档,并加上自己的测试用例,来加深自己对mysql函数的理解,也借此平台与大家分享,如有不妥和错误之处欢迎读者评论,我会及时改正,愿与大家一起学习进步. 概述: 所 ...
- git 服务器搭建及提交代码检查
本地 git 服务,通常都会选择 gitlab.本人最先也是选择 gitlab,在 centos7 上按照官网的步骤进行安装,下载的速度难以忍受,无奈放弃.最终选择在 docker 中安装 gogs ...
- [视频]K8飞刀 BadUSB Teensy自动种马演示教程
[视频]K8飞刀 Teensy USB自动种马演示教程 链接: https://pan.baidu.com/s/13bM1XSLrhlf90FDmPGfo1g 提取码: gy2q 源码:https:/ ...
- [EXP]K8 DotNetNuke DNNspot Store <=3.0 GetShell exploit
# Exploit Title: DotNetNuke DNNspot Store <=3.0 GetShell exploit# Date: 31/03/2015# Author: K8拉登哥 ...
- http协议返回码
有五种可能取值:1xx:指示信息--表示请求已接收,继续处理2xx:成功--表示请求已被成功接收.理解.接受3xx:重定向--要完成请求必须进行更进一步的操作4xx:客户端错误--请求有语法错误或请求 ...
- ThinkNet终于见面了
经过一段时间的DDD学习,第一个开源框架终于初步完成了,我为他命名为ThinkNet.之前或许你听过ThinkPHP,没错,虽然我对php没有过多的掌握,但是借助thinkphp,我也能开发一个web ...
- odoo开发笔记 -- 翻译机制及导入.po文件
待补充 http://ju.outofmemory.cn/entry/181972
- underscore.js源码解析【函数】
// Function (ahem) Functions // ------------------ // Determines whether to execute a function as a ...
- jsp页面简单的验证码实现
前段时间赶着结束毕业设计任务,现在完成了.回来补一下设计毕业设计的过程中遇到的问题和解决方案. 为了使小系统更有模有样,这里尝试在登录页面实现验证码功能.现描述一下我的解决方案. 首先看一下实现后的界 ...