Java第七天,类的继承
面向对象编程的三大特征:
封装、继承、多态
今天我们学习继承!
继承是多态的前提,如果没有继承就没有多态。
继承主要解决的问题就是共性抽取(将许多类共有的特性便作父类,这样可以较大程度的优化代码)。
父类又称基类、超类;子类又称派生类。
在继承关系中子类“就是”一个父类。如何理解?==》例如:动物类是父类,人类是子类,人就是动物。
如果父类和子类有一个重名的变量。子类中想要访问父类的重名变量需要用到一个关键字super。
无论成员属性还是成员方法,只要当前对象没有,只会向上走父类的同名属性或方法,而不会向下找。
父类的方法子类重写(方法名相同,参数相同)时,①需要标明 @Override 用来检测重写方法是否有效。需要注意的是,这个 @Override 是可有可无的,写只是为了检测,不写也不会影响重写效果。②但是父类的返回值必须大于等于子类的返回值!即父类的返回值是子类返回值的父类或多级父类或同类。③而且子类方法的权限必须大于等于父类方法的权限(public > protected > (default)默认> private),这种(标注③)情况不可以写@Override。
子类的构造方法当中,会有一个默认的super()方法调用,也就是说子类对象创建时会默认先执行父类的构造方法再执行子类的构造方法。
子类必须调用父类的构造函数。1.父类没有写构造函数(系统默认有一个无参构造函数),子类可以不写构造函数。2.如果父类有无参构造函数,子类可以不写构造函数。3.如果父类存在有参构造函数,则子类必须在自己的构造函数中显示的调用父类的构造函数即super(参数名),并且必须是子类构造函数的第一句代码,也就是说只能调用任意一个父类构造函数,不能调用多个。4.如果父类的构造函数只有一个,且修饰符是private,则不可以被继承。
- super关键字的三种用法。①访问父类成员属性。②访问父类成员方法。③访问父类构造函数。
- super关键字用来访问父类内容,this关键字用来访问本类内容。
- super()代表调用父类构造方法,this()代表调用本类构造方法。且不能同时使用,因为调用的构造函数必须为第一句代码。
- Java只支持单继承,不支持多继承,但是可以通过接口实现多继承的功能;Java可以多级继承,原始类为java.lang.Object类;Java一个父类可以有多个子类,一个子类,只能有一个父类。
- 如果父类的构造函数中调用的方法被子类重写,那么调用的会是子类的方法。
父类代码:
public class Animal {
public static int id = 0;
public int age;
public String name;
public Animal(int age,String name){
id++;
this.age = age;
this.name = name;
this.eat();
}
public void eat(){
System.out.println(this.age + "岁的" + this.name + "喝水。");
}
public int getID(){
return this.id;
}
}
第一个子类代码:
public class Dog extends Animal{
public Dog(int age,String name){
super(age,name);
eat();
}
@Override
public void eat(){
System.out.println(super.age + "岁的" + super.name + "吃骨头。");
}
}
第二个子类代码:
public class Cat extends Animal{
public Cat(int age,String name){
super(age,name);
eat();
}
@Override
public void eat(){
System.out.println(super.age + "岁的" + super.name + "吃鱼。");
}
}
程序执行代码:
public class Demo {
public static void main(String[] args) {
Dog dog = new Dog(2,"流浪狗");
Cat cat = new Cat(3,"小花猫");
System.out.println("我家一共养了" + cat.getID() + "只动物");
}
}

Java第七天,类的继承的更多相关文章
- 黑马程序员——JAVA基础之简述 类的继承、覆写
------- android培训.java培训.期待与您交流! ---------- 继承的概述: 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只 ...
- java第四节 类的继承/抽象/接口/多态性
/* 类的继承 类的继承可以简化类的定义 java只支持单继承,不允许多重继承 可以有多层继承,即一个类可以继承其一个类的子类,如类B继承了类A,类C又可以继承类B 那么类C也间接继承了类A 子类继承 ...
- C#图解教程 第七章 类和继承
类和继承 类继承访问继承的成员所有类都派生自object类屏蔽基类的成员基类访问使用基类的引用 虚方法和覆写方法覆写标记为override的方法覆盖其他成员类型 构造函数的执行 构造函数初始化语句类访 ...
- 第六周&Java实验报告四(类的继承)
一.实验目的 (1)掌握类的继承 (2)变量的继承和覆盖,方法的继承,重载和覆盖的实现: 二.实验的内容 (1)根据下面的要求实现圆类Circle. 1.圆类Circle的成员变量:radius表示圆 ...
- java基础二、类与继承
员工类 Employee, 经理类:Manager public class Employee { private String name; private double salary; privat ...
- JavaScript 类式继承与原型继承
交叉着写Java和Javascript都有2年多了,今天来总结下自己所了解的Javascript类与继承. Javascript本身没有类似Java的面向对象的类与继承术语,但其基于原型对象的思想却可 ...
- java基础讲解09-----接口,继承,多态
还有什么包装类,数字类,这些简单的我就不想过去介绍,前面也大概的介绍了下,继承,多态 1.类的继承 继承的思想:基于某个父类的扩展,制定一个新的子类.子类可以继承父类原有的属性,方法,也可以重写父类的 ...
- “全栈2019”Java第七十八章:内部类可以继承其他类吗?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java编程里类的继承
今天,我们将要讨论的内容是Java里面类的继承的相关概念. 说到继承,我相信大家都不陌生.生活中,子承父业,子女继承父母的财产,这就是继承.实际上,Java里的继承也是如此.对于一个类来说,它的数据成 ...
- (转)Java:类与继承
原文地址: http://www.cnblogs.com/dolphin0520/p/3803432.html 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大 ...
随机推荐
- gitbook 入门教程之超高颜值的思维导图simple-mind-map插件
欢迎访问 gitbook-plugin-simple-mind-map 官网
- css中:overflow:hidden清除浮动的原理
要想彻底清除浮动的影响,适合的属性不是 clear 而是 overflow. 一般使用 overflow:hidden,利用 BFC 的“结界”特性彻底解决浮动对外部或兄弟元素的影响. 1. 前言: ...
- Java基础(五):数组
数组,一种应用非常广泛的数据结构,简单地来说就是一组类型相同且无序的元素的存储在固定长度且有序的内存空间. 创建一个数组 在Java中,我们可以通过[]去声明一个指定类型的数组 int[] a; // ...
- Android NDK JNI 入门笔记-day04-NDK实现Hash算法
* Android NDK JNI 入门笔记目录 * 开头 前面的学习,我们已经掌握了 NDK 开发的必备知识. 下一步就要多实践,通过创造问题并解决问题,来增加熟练度,提升经验. 日常开发中,经常会 ...
- XML的概述,.Dom4解析和SAX解析
1.什么是XML XML 指可扩展标记语言(EXtensible Markup Language) html(hyper text markup langauge) XML 是一种标记语言,很类似 H ...
- .net core 依赖注入, autofac 简单使用
综述 ASP.NET Core 支持依赖注入, 也推荐使用依赖注入. 主要作用是用来降低代码之间的耦合度. 什么是控制反转? 控制反转(Inversion of Control,缩写为IoC),是面 ...
- nginx 内存池
参考 https://www.cnblogs.com/xiekeli/archive/2012/10/17/2727432.html?tdsourcetag=s_pctim_aiomsg 源码版本 n ...
- windows10 64位 安装mysql服务端 并使用navicat客户端链接 掉的一堆坑
1.目的 安装mysql服务端 并使用navicat客户端链接 2.过程 1)下载mysql服务端 下载过程(参考https://blog.csdn.net/youxianzide/article/d ...
- 我们是怎么实现gRPC CodeFirst-生成proto
前言: gRPC默认是ProtoFirst的,即先写 proto文件,再生成代码,需要人工维护proto,生成的代码也不友好,所以出现了gRPC CodeFirst,下面来说说我们是怎么实现gRPC ...
- Python第五章-内置数据结构01-字符串
Python 内置的数据结构 到目前为止,我们如果想保存一些数据,只能通过变量.但是如果遇到较多的数据要保存,这个时候时候用变量就变的不太现实. 我们需要能够保存大量数据的类似变量的东东,这种 ...