继承就是子类继承父类的特征和行为

有时候单一划分某个类别并不能处理所有情况,某些类别下有明显不同的子类,这些子类虽然拥有类似的行为和属性,但是他们各自发生的这些行为的方式或者属性对某些结果的影响是不一样的,这就需要划分出更多细致的类别。

比如之前类和对象笔记中,球员这个类别,球员都有球衣,号码,得分这些属性,打球的行为,但是很明显,篮球运动员和足球运动员在这些属性和行为上是有区别的。篮球运动员打球可以用手,胳膊。足球运动员打球可以脚踢头顶。篮球运动员一场得分两位数很正常,足球运动员显然不可能一场得分两位数。

基于这个分析。我们有必要把这个类拆分成篮球运动员类和足球运动员类。首先我们把所有球员的公共属性和公共行为抽象出来,形成一个类。然后通过继承,让两个子类都去享有这个类的公共属性和行为,但是具体行为依靠自己来实现。(测试框架中的测试基类)

java提供了extends关键字来实现继承功能

首先新建一个球员类Player:

package lesson;

public class Player {
public int number; //号码
public int score; //得分
public String position; //司职
public String name; //姓名 public void playBall(){
System.out.println("姓名:"+this.name);
System.out.println("号码:"+this.number);
System.out.println("得分:"+this.score);
System.out.println("司职:"+this.position);
}
}

接下来创建篮球运动员类和足球运动员类

package lesson;

public class BasketBallPlayer extends Player{
public static void main(String[] args){
BasketBallPlayer player1 = new BasketBallPlayer();
player1.name = "jordan";
player1.number = 23;
player1.position = "得分后卫";
player1.score = 33;
player1.playBall();
}
}

package lesson;

public class FootBallPlayer extends Player {
public static void main(String[] args){
FootBallPlayer player2 = new FootBallPlayer();
player2.name = "齐达内";
player2.number = 10;
player2.position = "中场";
player2.score = 2;
player2.playBall();
}
}

虽然这两个类中没有任何属性和方法,但是能点出Player类的属性,还能调用父类的方法。说明它继承到了父类的属性和方法。

需要注意的是:子类并不能继承父类的构造方法

创建子类对象时,会先调用父类的构造方法,然后调用自己的构造方法。

由于每个类都默认有一个默认的无参数的构造方法,所以为了看出效果。需要显示的创建这几个类的构造方法。

package lesson;

public class Player {
public int number; //号码
public int score; //得分
public String position; //司职
public String name; //姓名 public Player(){
System.out.println("我是Player");
}
public void playBall(){
System.out.println("姓名:"+this.name);
System.out.println("号码:"+this.number);
System.out.println("得分:"+this.score);
System.out.println("司职:"+this.position);
}
}
package lesson;

public class BasketBallPlayer extends Player{
public BasketBallPlayer(){
System.out.println("我是BasketBallPlayer");
}
public static void main(String[] args){
BasketBallPlayer player1 = new BasketBallPlayer();
player1.name = "jordan";
player1.number = 23;
player1.position = "得分后卫";
player1.score = 33;
player1.playBall();
}
}

package lesson;

public class FootBallPlayer extends Player {
public FootBallPlayer(){
System.out.println("我是FootBallPlayer");
}
public static void main(String[] args){
FootBallPlayer player2 = new FootBallPlayer();
player2.name = "齐达内";
player2.number = 10;
player2.position = "中场";
player2.score = 2;
player2.playBall();
}
}

结果说明:在创建子类对象时,会先调用父类的构造方法,然后调用自己的构造方法

这个结果并不能说明子类在继承父类时,也继承了父类的构造方法,只能说默认会调用而已。

java学习笔记12-继承的更多相关文章

  1. 1.8(java学习笔记)继承与方法的重写

    继承 在java中可以通过继承提高代码的复用率. 例如A继承了B,就可以是 例如,首先有一个类似Person,这个类中有有一些属性和方法,我们再新建一个Student类,其中有一部分属性和方法与Per ...

  2. Java 学习笔记(6)——继承

    之前说过了Java中面向对象的第一个特征--封装,这篇来讲它的第二个特征--继承.一般在程序设计中,继承是为了减少重复代码. 继承的基本介绍 public class Child extends Pa ...

  3. Java学习笔记之继承

    一.继承的基础 在Java术语中,被继承的类叫超类(superclass)或者父类,继承超类的类叫子类(subclass). 举例说明: class Box { public double width ...

  4. java学习笔记(12) —— Struts2 通过 xml /json 实现简单的业务处理

    XML 1.引入dom4j-2.0.0.jar 2.引入jquery-1.8.2.js 3.新建common.js getInfo = function(){ $.post("getXmlA ...

  5. Java学习笔记之——继承

    父类(基类):动物 子类:猫.狗.狼.老虎 如果子类继承于父类,则会自动拥有父类的所有非私有属性和方法,不会继承构造方法 父类和子类要满足一种关系:子类是父类的一种 Java中只支持单继承:一个子类只 ...

  6. Java学习笔记-12.传递和返回对象

    1.Clone()方法产生一个object,使用方法后必须产生的object赋值. Vector v2 = (Vector)v.clone(); 2.Clone()方法在object中是保护类型方法, ...

  7. java学习笔记1——继承

    通过在类的声明中加入extends子句创建一个子类并继承父类的成员变量和方法.如: class SubClass extends SuperClass{ ... } 若SuperClass是另一个类的 ...

  8. Java学习笔记12

    循环 打印一个字符串(例如: "Welcome to Java!") 100次,就需要吧下面的输出语句重复写100遍,这是相当繁琐的: System.out.println(&qu ...

  9. 0022 Java学习笔记-面向对象-继承、多态、组合

    继承的特点 单继承:每个子类最多只有一个直接父类,注意是直接父类,间接父类个数不限 注意父类的概念:A-->B-->C-->D,在这里,ABC都是D的父类,C是D的直接父类,AB是D ...

  10. java学习笔记12(final ,static修饰符)

    final: 意思是最终的,是一个修饰符,有时候一个功能类被开发好了,不想被子类重写就用final定义, 用final修饰的最终数据成员:如果一个类的数据成员用final修饰符修饰,则这个数据成员就被 ...

随机推荐

  1. Packages window(包窗口)

    使用Unity Package Manager(在Unity的顶层菜单中:Window > Package Manager)查看可以安装或已安装在Project中的软件包.此外,您可以使用此窗口 ...

  2. flask蓝图blueprint是什么

    蓝图 blueprint 简单的说,就是帮助我们对flask程序进行目录结构的划分:django项目创建时,是自动生成项目目录,而在flask这里,需要我们自己来规划,这就需要blueprint来将整 ...

  3. MyBatis接口式编程

    MyBatis使用接口连接数据库 之前学习了如何传统的使用MyBatis连接数据库,今天学习如何使用更方便快捷的方式练级数据库.使用接口连接数据库 https://www.cnblogs.com/li ...

  4. 如何快速在Github找到你想要的东西

    众所周知 Github是全球最大的xx交友平台,虽然被收购了.但是不并没有什么影响. 使用Git可以做很多事,在这里不再缀述,上面的资源也是多种多样,应有尽有 对于这样一个平台,我们想快速找到自己需要 ...

  5. 动态中位数-POJ 3784

    题目: 依次读入一个整数序列,每当已经读入的整数个数为奇数时,输出已读入的整数构成的序列的中位数. 输入格式 第一行输入一个整数P,代表后面数据集的个数,接下来若干行输入各个数据集. 每个数据集的第一 ...

  6. shell学习笔记2-find和xargs

    1,find命令形式 find pathname -options [-print - exec -ok] pathname find命令所查找的目录路径.. 表示当前目录,/表示系统根路径 -pri ...

  7. 【计算机】DMA原理2

    DMA (直接存储器访问) DMA(Direct Memory Access,直接内存存取) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载.否则,C ...

  8. IDEA 启动项目 很慢,总会到某个点进行延迟卡顿。

    最开始的我解决的方式 clean 项目 忙完后,闲暇时间想起这个问题,然后进行 面向百度,发现了问题所在 参考文档:https://www.cnblogs.com/zhangzhonghui/p/11 ...

  9. PostgreSQL练习

    学生表 Studentcreate table Student(Sid varchar(6), Sname varchar(10), Sage datetime, Ssex varchar(10)); ...

  10. Ubuntu 18.04修改默认源为国内源

    安装Ubuntu 18.04后,使用国外源太慢了,修改为国内源会快很多. 修改阿里源为Ubuntu 18.04默认的源 备份/etc/apt/sources.list 备份 cp /etc/apt/s ...