面向对象基础9(继承与继承语法)
面向对象基础9(继承)
封装、继承、多态是面向对象的三大特征
继承的理解
苹果(类)继承了水果(类)
老虎(类)继承了动物(类)
Java的继承是类与类之间的关系
是一种由一般到特殊的关系(与现实中的辈分没有关系,所以子类和父类名字并不准确)
——小类(子类)是一种特殊的父类(大类)
子类的实例完全可当做父类的实例来使用
别称
父类(超类、基类、大类);子类(派生类、小类)
继承的语法
修饰符 class 类名 extends 父类
{代码块}
说明:
Java是单继承的,所以,一个子类只能继承一个父类
若不显示继承父类,Java会默认继承Object
类
——一切皆Object!
举例:
public class A {}
class B extends A{}
class C extends B{}
//C的直接父类是B;Object、A是C的间接父类(我附庸的附庸不是我的附庸...)
//A的直接子类是B,间接子类是C
继承的作用:
子类继承父类,就可以直接使用父类的方法和成员变量
举例1:
public class Bird {public void fly(){System.out.println("Birds Flying");}
}
class Sparrow extends Bird{}
//此处Sparrow类继承Bird类,Sparrow类并没有写任何方法但继承了Bird类的方法
public class SparrowTest {public static void main(String[] args) {Sparrow sp=new Sparrow();sp.fly();}
}
/*
Birds Flying
*/
继承的优点是可以实现代码的复用
方法重写
存在意义
当子类发现父类的方法不适合自己的时候,就需要重写方法
规则
两同两小一大:
两同:方法名相同、形参列表相同;
两小:返回值类型相同或者更小,声明抛出的异常相同或者更小;
一大:访问权限相同或者更大
举例2:
public class Ostrich extends Bird{//重写fly方法@Overridepublic void fly(){System.out.println("can not fly");}
}
public class OstrichTest {public static void main(String[] args) {Ostrich A=new Ostrich();A.fly();}
}
/*
can not fly
*/
此时原有的fly
方法被重写
注解@Override
——用于报错,要求被修饰的方法必须重写父类方法,否则就报错(方法拼写错误);
Super关键字
与this
引用很相像,super
可以用于限定访问父类的实例变量和实例方法。
super.父类的实例变量
super.父类的实例方法(参数)
例3:
class Base {int age=2;
}
class Sub extends Base{int age =20;public void test(){int age=200;System.out.println(age);System.out.println(this.age);//调用该类中的成员变量System.out.println(super.age);//调用父类中的成员变量public void names(String name){System.out.println("执行父类"+name);}}
}
public class SubTest {public static void main(String[] args) {Sub A=new Sub();A.test();}
}
/*
200
20
2
*/
例3改:
class Base {int age=2;
}
class Sub extends Base{public void test(){System.out.println(age);System.out.println(this.age);System.out.println(super.age);}//此处删除了原有的局部变量与子类中的成员变量
}
public class SubTest {public static void main(String[] args) {Sub A=new Sub();A.test();}
}
/*
2
2
2
*/
从上面两个例子可以看出:
变量的调用遵循就近原则,输出的age
变量优先调用所属方法的局部变量,若局部变量不存在,其次考虑所属类的实例变量(此处是子类),最后考虑其父类的实例变量。
而this
和super
关键字再次就是为了打破就近原则,调用所需要的变量。
class Base {public void names(String name){System.out.println("执行父类"+name);}
}
class Sub extends Base{public void names(String name){System.out.println("执行子类"+name);}public void test(){names("Java");/*此处等同于this.names("Java");等同于Base.names("Java");类方法需要类来调用,默认添加类名*/super.names("Java");}
}
public class SubTest {public static void main(String[] args) {Sub A=new Sub();A.test();}
}
/*
执行子类Java
执行父类Java
*/
此时带有super
关键子的names
方法会打破就近原则,执行父类的原有方法。
子类调用父类的构造器
子类的构造器一定要调用父类的构造器一次(有且仅有一次)
如果子类构造器没有显示调用父类构造器,系统会在子类构造器的第一行自动调用父类无参数的构造器;
子类构造器的第一行显示使用
super
调用父类构造器:super()
super和this关键字不顾能出现在同一语句
例5:
package Super关键字;
class Fruit{private double weight;public Fruit(double weight){this.weight=weight;}
}
public class Apple extends Fruit {public Apple() {super(2.2);//常识调用父类Fruit的double构造器}
}
备注:如果父类没有无参构造器——则子类构造器必须显示调用(super
调用,如上例)父类的构造器
面向对象基础9(继承与继承语法)相关推荐
- Java面向对象——基础2 封装、继承、多态
目录 Java基础知识图解 一.方法的重载 1.1重载是什么? 1.2重载的例子 1.3判断重载练习 1.4重载小结 1.5可变个数的形参 说明: 二.方法参数的值传递机制 2.1基本数据类型的参数 ...
- Java基础【之】面向对象编程(封装、继承(extends、方法重写、super)、多态(动态绑定、重载/重写)、代码实现)
Java基础[之]面向对象编程(封装.继承.多态.代码实现) 1.封装 2.继承 2.1.extends 2.2.方法重写 2.3.super 3.多态 3.1.对象的多态.方法的多态 3.2.动态绑 ...
- 面向对象基础、面向对象的三大特征(封装、继承、多态)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 面向对象基础 概述 创建对象和类 类的三种定义方式 类的实例化 类的基本结构 面向对象之封装 概念 封装之对象的相关操作 封 ...
- 面向对象(基础oop)之继承总结
大家好,我叫李京阳,,很高兴认识大家,之所以我想开一个自己的博客,就是来把自己所了解的知识点通过自己的话写一下,希望被博客园的朋友们点评和一起讨论一下,也希望从博客园中多认识一些软件开发人员!现在我开 ...
- JAVA入门基础6**(系列更新)———面向对象(二)的继承,抽象,接口
**JAVA入门基础6**(系列更新)---面向对象(二)的继承,抽象,接口 面向对象2 大致总结 继承 @Override super();的应用 调用顺序 构造顺序 多态 什么是多态??? 多态有 ...
- python语言基础(十三)面向对象编程(封装、继承、多态)
面向对象的三大特征:封装.继承.多态. 封装 封装是面向对象编程的一大特点,将属性和方法放到类的内部,通过对象访问属性或者方法,隐藏功能的实现细节,也可以设置访问权限. class Student() ...
- java面向对象基础——继承、抽象类
一.继承 1.继承概述 为什么会有继承? 现实生活中,为什么要有继承? 程序中,为什么要有继承? 继承的含义 继承:在java中指的是"一个类"可以"继承自"& ...
- 面向对象三大特性之一:继承(C++)
目录 继承的定义 基类对象和派生类对象的赋值转换 继承中的作用域 派生类与基类中成员的关系 派生类与默认成员函数的关系 继承与友元的关系 继承与静态成员的关系 面向对象的三大特性:封装,继承,多态. ...
- C++ 面向对象程序三大特性之 继承
目录 继承的概念 继承的定义及使用 继承方式和访问权限 基类和派生类对象的赋值转换 继承中的各成员的作用域 派生类的默认成员函数 构造函数 拷贝构造 赋值运算符重载函数 析构函数 继承与友元 继承与静 ...
- 1.4 面向对象编程中级 对象的继承与super关键字-跟着韩老师学JavaSE
大佬给推荐的韩顺平老师的课程 2021年刚刚录的船新版本! [零基础 快速学Java]韩顺平 零基础30天学会Java 硬把从另一个讲师那里看了300多集的我拽过来 几十节课一下子爱上这个节奏了!安利 ...
最新文章
- SQL注入漏洞全接触--入门篇
- 关于工作流引擎的设计讨论
- apache服务器的配置文件httpd.conf中有很多内容,请解释如下配置项:
- 注意了,Fastjson 最新高危漏洞来袭!
- 工业机器人电柜布线_协作并联,重新注解并联机器人
- eureka服务失效剔除时长配置
- 【CMD】 与路径相关的常量:当前目录的绝对路径、批处理文件所在目录的绝对路径、批处理文件的全路径
- oracle拼接字符串报错,Oracle 中wmsys.wm_concat拼接字符串,结果过长报错解决
- 每天一点点之 taro 框架开发 - taro路由及传参
- Vue2.0 脚手架代码详解
- android studio 继承关系 快捷键,Android Studio快捷键
- RAD 版本迁移工具,不怕升级麻烦了。
- 13. GameProjec1_GameEngine
- 单片机 舵机 SG90 舵机 控制原理 MSP432 单片机
- python操作autocad_利用python控制Autocad:pyautocad方式
- vue3 + vite +ts 引入静态图片
- ROS 应用开发入门 发布者Publisher的编程
- azkaban报Error Chunking during uploading files to db
- java索引图片,索引从图片中提取像素数据的代码的错误
- 如何给mac重做系统