Java 类设计----Java类的继承
Java类的继承
为描述和处理个人信息,定义类Person:
public class Person {
public String name;
public inat age;
public Date birthDate;
public String getInfo()
{...}
}
为描述和处理学生信息,定义类Student:
public class Student {
public String name;
public int age;
public Date birthDate;
public String school;
public String getInfo()
{...}
}
通过继承,简化Student类的定义:
public class Person {
public String name;
public int age;
public Date birthDate;
public String getInfo() {...}
}
public class Student extends Person{
public String school;
}
Student类继承了父类Person的所有属性和方法,并增加了一个属性school。Person中的属性和方法,Student都可以利用。
类继承语法规则:
< 修饰符> class < 子类名称> [extends < 父类>]
{
<属性和方法的声明>
}
Java只支持单继承,不允许多重继承
一个子类只能有一个父类,一个父类可以派生出多个子类
子类继承了父类,就继承了父类的方法和属性。
在子类中,可以使用父类中定义的方法和属性,也可以创建新的数据和方法。
在Java 中,继承的关键字用的是“extends”,即子类不是父类的子集,而是对父类的“扩展”。
关于继承的规则:
子类不能继承父类中私有的(private)的成员变量和方法。
例子:
public class Person {
public String name;
public int age;
public Date birth;
public String getInfo(){
return "name: " + name + ", " + "age: " + age + ", " + "birth: " + birth;
}
}
public class Student extends Person{ public String school; public void print() {
//System.out.println(this.lover);
}
}
public class TestPerson {
public static void main(String[] args) { Student student = new Student();
student.name = "Jerry";
student.birth = new Date();
student.age = 1;
student.school = "atguigu"; // student.lover = ""; System.out.println(student.getInfo()); Person person = new Person(); person.age = 1;
person.birth = new Date();
person.name = "Tom"; System.out.println(person.getInfo());
}
}
练习
1、(1)定义一个ManKind类,包括
成员变量 int sex 和 int salary;
方法 void manOrWorman():根据sex的值显示“man”(sex==1)或者“women”(sex==0);
方法 void employeed():根据salary的值显示“no job”(salary==0)或者“ job”(salary!=0)。
/**
* 定义一个ManKind类,包括
* 成员变量 int sex 和 int salary;
* 方法 void manOrWorman():根据sex的值显示“man”(sex==1)或者“women”(sex==0);
* 方法 void employeed():根据salary的值显示“no job”(salary==0)或者“ job”(salary!=0)。
*/
public class ManKind { int sex;
int salary; public void manOrWoman() {
if(sex == 0){
System.out.println("woman");
}else if(sex == 1){
System.out.println("man");
}
} public void employeed() {
if(salary != 0){
System.out.println("job");
}else{
System.out.println("no job");
}
}
}
(2)定义类Kids1继承ManKind,并包括
成员变量 int yearsOld;
方法 printAge() 打印 yearsOld 的值。
(3)在Kids1类的main方法中实例化Kids1的对象 someKid,用该对象访问其父类的成员变量及方法。
/**
* 定义类 Kids1 继承ManKind,并包括
* 成员变量 int yearsOld;
* 方法 printAge() 打印 yearsOld 的值。
*
* 在Kids1中重新定义employed() 方法,覆盖父类ManKind中定义的employed()方法,
* 输出“Kids should study and no job.”
*/
public class Kids1 extends ManKind{ int yearsOld; void printAge(){
System.out.println("yearsOld: " + yearsOld);
} //修改练习3中定义的类Kids1中employed()方法,在该方法中调用父类ManKind的employed()方法,
//然后再输出“but Kids should study and no job.”
public void employeed() {
super.employeed();
System.out.println("Kids should study and no job.");
} //在Kids1类的main方法中实例化Kids1的对象 someKid,用该对象访问其父类的成员变量及方法。
public static void main(String[] args) {
Kids1 someKid = new Kids1();
someKid.sex = 1;
someKid.salary = 5000;
someKid.yearsOld = 25; someKid.manOrWoman();
someKid.employeed();
someKid.printAge();
}
}
2、根据下图实现类。在TestCylinder类中创建Cylinder类的对象,设置圆柱的底面半径和高,并输出圆柱的体积。
public class Circle { protected double radius; public Circle(double radius) {
this.radius = radius;
} public double getRadius() {
return radius;
} public void setRadius(double radius) {
this.radius = radius;
} public double findArea(){
return 3.14 * radius * radius;
}
}
public class Cylinder extends Circle{ private double length; public Cylinder() {
this.length = 1;
} public double getLength() {
return length;
} public void setLength(double length) {
this.length = length;
} /**
* 返回圆柱的体积
* @return
*/
public double findVolume(){
return super.findArea() * length;
} /**
* 返回圆柱的表面积
*/
@Override
public double findArea() {
return super.findArea() * 2 + 2 * 3.14 * radius * length;
}
}
public class TestCylinder {
public static void main(String[] args) { Cylinder cylinder = new Cylinder(); cylinder.setLength(2); //返回表面积
System.out.println(cylinder.findArea());
//返回体积
System.out.println(cylinder.findVolume());
}
}
Java 类设计----Java类的继承的更多相关文章
- Java开发设计——UML类图
Java开发设计——UML类图 摘要:本文主要介绍了UML类图的相关知识. 简介 在UML中,类使用包含类名.属性和操作且带有分隔线的长方形来表示,类图分为三层. 第一层是类的名称,如果是抽象类或接口 ...
- 以人类 Person 为基类设计学生类 Student 和教师类 Teacher
学习内容:实验二以人类 Person 为基类设计学生类 Student 和教师类 Teacher 示例代码: package 实验二; import java.util.Scanner; class ...
- 实验二——以点类 Point 为基类设计圆类 Circle
学习内容:以点类 Point 为基类设计圆类 Circle 示例代码: package 实验二; import java.util.Scanner; class Point{//父类Point pri ...
- Java实验项目三——编程实现Person类,学生类的设计及其继承关系
Program: 编程实现Person类,学生类的设计及其继承关系 代码如下: 定义抽象类Person 1 /* 2 * Description:建立抽象类 3 * 4 * Written By:Ca ...
- Java学习---JAVA的类设计
基础知识 JAVA是由C/C++语言发展而来的纯面向对象语言,其基本元素包括:简单数据类型 和 复合数据类型(即类).类是对客观事物的抽象描述,它有面向对象的四个特点,即:封装性.继承性.多态性和通信 ...
- Java的对象与类,继承
Java的对象与类,继承 题目1.Java类的建立与使用 设计一个用来描述汽车的类,使用类的非静态成员变量来表示汽车的车主姓名.当前的速率和当前方向盘的转向角度,使用类的非静态成员方法来表示改变汽车的 ...
- Android(java)学习笔记62:继承Thread类创建线程类
package cn.itcast_02; /* * 该类要重写run()方法,为什么呢? * 不是类中的所有代码都需要被线程执行的. * 而这个时候,为了区分哪些代码能够被线程执行,java提供了T ...
- Java 类设计技巧
摘自<Java核心技术>卷I:基础知识 p140 第4章对象与类 - 类设计技巧 1)一定将数据设计为私有. 最重要的是:绝对不要破坏封装性.有时候,需要编写一个访问器方法或更改器方法,但 ...
- 设计一个 Java 程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为“XYZ”。。。
设计一个 Java 程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为“XYZ”,则抛出一个异常信息“This is a XYZ”,如果从命令行输入 ABC,则没有抛出异常.(只有 ...
随机推荐
- solr进阶九:solr对数字和单个字符的搜索
solr中配有分词器,但分词器里面有大写转换为小写的过滤器时,数字就会被过滤.比如123中国ABC.123就会被过滤掉了,所以才查1|12|123都会失败. <Solr 数字字符不能搜索的一个问 ...
- acrobat-网格-参考线-网格大小设置
视图--显示/隐藏--标尺及网格-网格/标尺: 网格:ctrl+U 标尺:ctrl+R 标尺: 网格: 标尺+网格: 网格大小设置: 编辑--首选项-单位和参考线 2013 ...
- JavaScriptSerializer 时间格式化
时间格式化 Model m = , Dt = DateTime.Now }; JavaScriptSerializer js = new JavaScriptSerializer(); string ...
- LINQ教程二:LINQ操作语法
LINQ查询时有两种语法可供选择:查询表达式语法(Query Expression)和方法语法(Fluent Syntax). 一.查询表达式语法 查询表达式语法是一种更接近SQL语法的查询方式. L ...
- 记录github 免登陆用户名密码方式
1.https 代码模式切换为ssh模式: (本博客有文章介绍) 2.~/.ssh/github_rsa.pub 内容添加到github “config“ 目录下面 3.配置~/.ssh/config ...
- 使用html2canvas实现超出浏览器部分截图
之前写过一篇关于 html2canvas如何在元素隐藏的情况下生成截图 的文章,后面发现还有个坑在等着我,就是如果合成图片太大,超出了浏览器的可视区域,那么超出部分是无法截图的.在网上找到了以下方法, ...
- laravel 参数配置
1:在项目根目录下有个叫.env的文件.这个文件是配置配置.由config文件下的app.php 直接读取. #参数解释 APP_ENV=local #访问地址 APP_DEBUG=true #是否开 ...
- 用route命令解决多出口的问题
网络已经走进了我们的生活.工作.学习之中,大多数单位.公司都已经连接到了Internet.但是,因为各种原因,有这样一个问题存在.就是:这些单位即有到公网(Internet)的出口连接,也有到专网(单 ...
- Tensorflow参数初始化很慢的问题
首先查看是否使用了import cv2 如果有import cv2,说明是opencv的问题 因为如果你的opencv是本地编译的,那么很可能使用了cudnn进行编译,那么这个cv2就会占用显存,并且 ...
- 【转】【Linux】linux下xargs命令
xargs命令xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具.它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数.xa ...