java school

1. HelloWorld

1.1 练习

温度转换程序:

import java.util.Scanner;
public class Temperature{
   
    public static void main(String [] args){
   
        int c;
        Scanner sc = new Scanner(System.in);
        c = sc.nextInt();

        int f = 9 * c / 5 + 32;
        System.out.println("最高温度:" + c + "C");
        System.out.println("最高温度:" + f + "F");
    }
}

天气程序:

import java.util.Scanner;
public class Temperature{
   
public static void main(String [] args){
   
double c;
String w;
Scanner sc = new Scanner(System.in);
c = sc.nextDouble();
w = sc.next();
    
    double f = 9 * c / 5 + 32;
System.out.println("最高温度:" + c + "C");
System.out.println("最高温度:" + f + "F");
System.out.println("天气:" + w);
}
    }

Java基础–数据

1.标识符:temp,grade,charPosition;一般一个或者多个英文单词;多个第二个首字母大写。

2.关键字:一些英文单词,Java语言自己用,不允许用户再定义为其他含义。

3.类型:基本类型,引用类型

基本类型:byte、short、int、 long,float、 double、 char, boolean

引用类型:类、接口、数组

4.表达式:运算符把变量、常量链接起来。例如:9 * c / 5 + 32

优先级:c + 5 * d;*的优先级高于+;x + y == c * d;运算次序1)x+y;2)c * d;3)判断 ==;记不住

写成这样:(x + y) ==(c * d)

结合性:a + b + c;

5.类型转换

public class Test{
   
    public static void main(String [] args){
   
        int i = 100;
        long l = 20;

        l = i;
        i = (int)l;
    }
}

Java程序:

1程序框架:public class xxxxx{…}

框架里面是一个方法:public static void main(String [] args){…}

程序功能写到main方法中

2程序功能:

IPO三步:输入,处理,输出;

再讲一个例子:

import java.util.Scanner;
public class CircleArea{
   
public static void main(String [] args){
   
//input
double r;
Scanner sc = new Scanner(System.in);
r = sc.nextDouble();
    
    //process
double area = r * r * 3.14;
//output
System.out.println("circle area = " + area);
}
    
    

1.2 作业

第一周作业

1 .编写一个Java程序,输入两个整数,实现两个数的交换,并输出交换后的结果。要点提示:

  1. 假设有两个整型变量a和b,设计一个临时变量temp辅助交换

  2. 交换过程如下:

    temp = a;

    a = b;

    b = temp;

2 .摄氏温度和华氏温度是两个主要的国际温度计量标准。

不同国家使用不同的温度计量方法,

例如我国使用摄氏度,而美国使用华氏度。

如果输入摄氏温度,如何转换为华氏温度呢? 编写程序,将摄氏温度转换为华氏温度。

要点提示:

  1. 定义变量C和F分别表示摄氏度和华氏度;

  2. 从键盘输入摄氏度C的值;

  3. 利用转换公式F = 9*C/5+32计算出华氏度,赋值给F;

  4. 将F变量的值输出。

3 .上题实现了由摄氏温度转换为华氏温度,

请编写程序实现华氏温度转换为摄氏温度,输入华氏温度,将转换结果输出。

要点提示:

转换公式为C = (F-32)×5/9,F表示华氏度,C表示摄氏度。

4 .编写程序,

输入球体的半径,计算球的体积,输出结果。

要点提示:

体积计算公式V= 4 / 3 * π * r * r * r,r为半径。

5 .编写程序,

输入正方形的边长,计算正方形的面积,输出结果。

要点提示:

面积计算公式S= side * side,side为边长。

6 .在购物结账时,会根据商品的单价和购买数量计算出总价。

编写程序,从键盘输入瓶装水的单价和购买数量,计算并输出金额,计算结果保留两位小数。

要点提示:保留指定位数的小数

  1. 引入DecimalFormat包:import java.text.DecimalFormat;

  2. 设定小数位数格式:DecimalFormat df = new DecimalFormat(“0.00”);

  3. 将result值保留指定位数小数:result = df.format(total);

7 .身体质量指数即BMI指数,是用于衡量人体胖瘦程度以及是否健康的一个标准。

BMI指数的计算公式为:BMI = 体重(kg)÷身高2(m2)。

例如,一个人身高1.75米、体重75公斤,他的BMI值为24.49。

编写程序计算自己的BMI指数,对照下表查看自己身体健康状况。

要点提示:

计算公式BMI=体重÷身高2要写成合法的Java表达式,注意运算符优先级。

8 .国内BMI值(kg/m2) 9. 分类

9 .< 18.5 11. 偏瘦

10 .18.5 ~ 24 13. 正常

11 .24 ~ 28 15. 偏胖

12 .= 28 17. 肥胖

说明:6、7选做

1.3 作业

第二周作业

1 .有折扣矿泉水金额:

每瓶矿泉水2.2元,1

0瓶及以上9折,

24瓶及以上8折;

输入购买数量,计算金额。

2 .两个数排序。

输入两个数a,b,从小到大输出。

提示:

两种方法:

第一种方法,直接比较,输出;

第二种方法,比较,交换;

3 .三个数排序。

输入三个数a,b,c,从小到大输出

4 .设计一个猜数游戏,

程序随机产生一个1-100的整数作为目标数字,

用户输入一个整数,

如果与目标数字相同,则用户猜中,游戏结束;

否则程序提示用户其所输入的数字比目标数字是大还是小,

如果6次均没有猜中,则游戏结束。

要点提示:

  1. 产生1-100随机数语句:x=1+(int)(Math.random()*100);

  2. 生成随机数,再使用循环输入数据并进行判断,直到相等或者超过6次。

5 .输入全班学生的成绩,统计及格(成绩>=60)学生的平均分。

要点提示:

  1. 全班学生人数未知,使用while循环,输入-1表示所有成绩输入完毕。

  2. 在循环体中加入if分支语句,如果输入成绩大于60,则进行累加和计数。

6 .显示100以内所有可以同时被3和7整除的整数。

要点提示,

在循环体中判断一个整数n是否能够被3和7整除,让n的值从1到100循环;

2. 类与对象

作业问题

提交:附件格式,按要求做;

提交:按时,1-2;21;3-7;4-6;5-3.

三个数比大小:

if(a<=b && b<=c) {
   
    //
}
else if (a<=c && c<=b) {
   
    //
}

不推荐;

2.1 类的引入

从原来的学生类中做三步:

第一步,提出属性:

第二步,提取方法,display

第三步,提出main方法,放到Test类中

看Student类:

三个属性,一个方法;

Test类:main方法。

Test:测试类,引导类;

练习:定义一个教师类:姓名、年龄、工资;设计测试类Test装入运行教师类。

总结:

定义类:包括两个部分:属性和方法;

属性:简单说就是类的变量;描述类中对象特征的;

方法:类的函数;描述类的行为;

2.2 构造方法

构造方法:给属性赋初值。

构造方法:名字和类名一样;没有返回类型;

用途:给属性赋初值;

参数:一般构造方法参数的个数与属性个数一致;

一般写法上,参数类型和名字与属性一样;赋值:this.name= name;

this代指本类对象。

练习:参考Student类,给Teacher类增加构造方法,初始化属性;

2.3 访问控制权限

四种访问控制权限:public、private、protected、默认;

总结:简单处理,方法,类前面加public;属性前面加private;

2.4 对象实例化过程

例子:Student s = new Student(“张三”, 19, 89);

Student:类;简单理解为类型;与int,double相似;

s:对象;简单理解为一个变量;与int i 中的i类似

实例:堆中开辟的空间,称为实例。

new:在堆中开辟存储空间,空间大小又Student确定,存放对象属性值;

具体说:开辟空间包括:三个部分:name的值,age的值和grade的值;

构造方法:Student(“lisi”, 19, 78),给实例初始化属性值;

=的作用:空间的起始地址赋给对象s;

对象s存放是地址;对象类型是应用类型;

开辟空间,赋初值的过程,称为实例化;

2.5 this关键字

this是一个关键字,指代本类对象。

举例说明:

Student s = new Student(“lisi”, 19, 78);

调用 Student(“lisi”, 19, 78);,对应这个方法的this指针是s

构造方法中:this.name = name;本质上执行的是s.name = name

修改年龄的执行过程:

s.display(); 执行display方法对应的对象s;

display方法内,this指代就是对象s

this的用法:有两种:

this.name:本类对象;

this,指代本类构造方法;this(“unknown”,0, 0);

在没有歧义的情况下,this可以省略。

2.6 作业

第三周作业

1 . 设计一个手机类MobilePhone,

属性有品牌brand和号码code,类型String;

设计一个带参数的构造方法初始化对象属性。

设计测试类,创建MobilePhone类的对象,并调用方法显示手机基本信息。

要点提示:

  1. 定义MobilePhone类的属性:品牌、号码,类型String;

  2. 定义MobilePhone类的构造方法:public MobilePhone(String brand, String code);

  3. 定义MobilePhone类的显示方法:display()。

2 . 摄氏温度类Celsius,

有一个属性temp,类型int;

增加一个构造方法Celsius(int temp);

有一个转换方法int cTof(int temp);

一个显示方法,显示对应的摄氏和华氏温度。

设计测试类,输入摄氏温度,显示对应的摄氏温度和华氏温度。

3 . 设计骰子类Dice,

有一个属性:点数,num(1–6),类型int;

有一个方法play(),掷色子;显示方法,显示点数;

增加一个构造方法Dice(),随机产生一个点数。

设计测试类,

定义骰子对象,显示点数,掷骰子,再次显示点数。

4 . 定义一个周工资类Salary,可以计算每周的工资。

有两个属性:

工作小时数hours,类型int;

每小时工资price,类型double。

一个构造方法Salary(int hours, double price)。

一个方法geMoney(),根据小时数来计算工资,如果每周小时数超过40,超出部分工资增加50%;

一个显示工资方法display()。

设计测试类,

定义工资对象,输入工作小时数和小时工资,显示周工资。

5 . 定义Door类,

有属性宽度、高度,int;颜色,String;

方法,显示门信息。增加构造方法。

设计测试类,

输入Door类对象属性值,显示对象信息。调用开门方法,再次显示门信息。

6 . 定义教室类ClassRoom,

属性:座位数,编号,朝向;

方法:显示教室信息。增加一个属性门door,类型Door。

增加构造方法初始化属性值。

设计测试类,

输入ClassRoom类对象属性值编号、座位数和朝向,

定义一个门对象,显示教室对象信息。

7 . 定义线段类LineSeg,

有四个属性:x1,y1,x2,y2;方法求线段长度,显示线段信息;

增加构造方法LineSeg(double x1, double y1,double x2, double y2)。

设计测试类,输入LineSeg类对象端点坐标值,定义LineSeg类对象ls,显示线段对象ls的长度。

8 . 在程序6基础上定义矩形类MyRectangle;

有四个属性:

起点x,y;

宽度:length,高度:height;

方法:计算面积,显示面积。

增加构造方法MyRectangle(double x, double y, double length, double height)。

设计测试类,

输入矩形的起点坐标值,长和宽,显示矩形的面积。

9 . 设计一个MyPoint类,

属性:x,y;点的坐标值;

方法有显示方法,构造方法。

设计测试类,

输入坐标值,显示点。

10 . 圆类MyCircle有属性:圆心center,类型MyPoint;半径r,类型double;

方法有:

构造方法MyCircle(MyPoint p, double r),

计算面积方法getArea(),返回类型double;

显示面积方法display(),返回类型void。

在测试类中定义圆对象,显示圆面积。

前7个比做,有面两个选做。

3. 类&对象&关键字

3.1 类

1、类的组成:属性和方法

2、属性的定义:类型:标识符

3、方法:类似于函数。返回类型,方法名,参数,方法体

4、方法:构造方法、置取方法,普通方法

5、构造方法:名字与类名相同,用于初始化属性的值;

6、置取方法:获取方法,名字是get+属性名首字母大写,返回类型是属性类型,返回值是属性的值;

​ 设置方法,名字是set+属性名首字母大写,返回类型void,使用参数值修改属性值。

7、类的访问控制权限:public、private、protected、默认。类和方法用public;属性用private

3.2 对象

1、对象的定义

2、对象的实例

3、this关键字:访问属性和方法;访问本类对象的构造方法;

4、实例化过程

3.3 静态属性和静态方法

1、静态属性,管理类中的对象实例;

2、静态方法,只能访问静态的属性和方法;

3、静态属性和方法,可以使用类名访问,也可以使用实例名访问

3.4 重载方法

1、要求:访问控制权限,类型,名字相同,参数不同;

2、参数i相同:两个方法的参数个数和类型一一对应,相同;其他不相同;

3、重载方法的作用是相同的名字的不同方法表示同一功能的不同实现。

public class Dice {
   
    // 1、属性
    private int num;
    
    // 2、空参构造器
    public Dice() {
   
        num = play();
    }
    
    public int play() {
   
        int temp = (int) ((Math.random) * 6) + 1;
        return temp;
    }
    
    // 对上面方法play()的改进
    public int play() {
   
        num = (int) ((Math.random) * 6) + 1;		// 直接修改属性
    }
    
}

Color,是Java基础类

自己定义颜色属性的时候,写成myColor,好像写成 color,也没有什么影响

类似的

Circle, Point是基础类

自己写成 myCircle, myPoint

赋值(修改属性值)的几种方法

1、带参构造器,参数来赋值属性

2、get, set方法

3、普通方法

使用工具,打开.class文件,有个init(),说明有默认构造器

如果自己写了构造器(空参/带参),.class文件中,就没有init()了

指针和引用的理解

指针->变量

引用->常量

允许负值,不允许计算

C语言

int* p;			// 定义
malloc();		// 申请
free();			// 释放

C语言指针

1、提前释放指针,悄悄死掉

2、不释放指针(内存泄漏),慢死

C指针,传递了很多层,到最后程序员,不是道什么时候释放了,用不用释放了

Java, GC(garge collector),垃圾回收器

GC代价

1、牺牲性能

application,需要设置标志,去检测,哪些需要回收,这个GC application,运行会占用资源

2、收集不完整

难以判断的,就不判断了

大量商用服务器,Java写

高性能,高要求服务器,C写的

3.5 static的引入

C语言

// 函数
function() {
   
    static int i;		// 有点类似,常驻内存了
}

// 修改i的值
i = 10;
i = 20;
i = 30;

Java

加完 staic,属性就不存到 heap中了

static静态方法中,只能使用静态属性 或 方法

1、Math.random()

静态属性、方法

1、静态attribute, method和类关联,用类名 或 实例名,来访问

2、静态属性:类属性,

类有效,则静态属性有效

public Demo() {
   
    this("");			// 访问本类对象的构造方法
    
}

3.6 作业

第四周作业

1 . 使用前面定义点MyPoint类,

增加两个距离重载方法,参数是点,或者是一对坐标值。

2 . 使用前面定义点MyPoint类,

增加两个重载设置点方法,参数是点,或者是一对坐标值。

使用设置方法修改。

提示:

先调get方法,取出x来,再set进去

3.设计一个正方形类MySquare,

有两个基本属性:左下起点,MyPoint类型;边长,double类型。

正方形类MySquare的方法有:构造方法MySquare(MyPoint start, double side);

构造内接圆方法createCircle(),类型MyCircle;

显示方法display(),显示内接圆的圆心,半径和面积。

设计测试类,

输入正方形起点和边长,构造内接圆,显示内接圆信息。

4.设计一个排课程序,

设计一个教师类Teacher,

再设计一个课程类Course,

属性有课程编号,名称,简介,类型都是字符串。

课程类Course中有一个构造方法,

一个排课方法schedule(Teacher t),参数是教师对象,返回类型void,

方法体显示教师姓名,讲授课程,

显示结果示例:“zhangsan teaching Java programming”,

其中zhangsan是教师名,Java programming是课程名。

设计测试类,

定义教师对象,课程对象,显示排课结果。

5 . 设计一个选课程序,

先设计一个课程类Course,

属性有课程编号,名称,简介,类型都是字符串。

再参考前面书中内容设计一个学生类Student,学生类设计一个选课方法select(Course c),完成选课功能,

参数是课程对象,方法体显示学生姓名,选修课程,

显示结果示例:“zhangsan selecting Java programming”,

其中zhangsan是学生姓名,Java programming是课程名。

再增加一个类似的方法,退选课程unSelect(),

方法体显示学生姓名和课程名称。

设计测试类,定义学生对象,课程对象,显示选课和退课的结果。

6 . 设计一个小猴打怪程序;

定义一个小猴类,属性:编号,名字,方法打怪;

定义一个测试类,创建小猴,打怪;

显示创建小猴的序号,打怪内容;

7 . 提高:设计一个摄氏温度类Celsius,有两个属性,温度值和标志值,标志值是C;

同样设计一个华氏温度类Fahrenheit,有两个属性,温度值和标志值,标志值是F。

给摄氏温度类增加一个温度转换方法cTof(),返回华氏温度类的对象,对象的属性温度是转换后的华氏温度值;

同样,给华氏温度增加一个转换方法fToc(),返回摄氏温度类的对象,对象的属性温度是转换后的摄氏温度值;

两个类各有一个显示温度方法display(),显示温度值和标志。

设计测试类,输入一个摄氏温度值,构造摄氏温度类对象,显示摄氏温度结果。

使用温度转换方法cTof()生成一个华氏温度对象,显示转换后的温度结果。

8 . 提高:

定义车类Car,

一辆车有四个轮子(类Wheels)和一个发动机(类Engine)。

现在要求用组合方法设计类Car、类Wheel和类Engine。

  1. 类Engine 有一个字符串属性类型,记录发动机的型号;

有构造方法,可设置发动机的型号;

有方法start()启动引擎(输出包含发动机型号和“starts”的字符串)。

  1. 类Wheel有一个字符串属性类型,记录轮胎的型号,有整数类型属性编号,记录当前轮胎位置的编号(1:front-left,2:front-right,

3:back-left,4:back-right),有构造方法,可设置轮胎的型号和编号,有方法roll()表示轮胎正在转动,输出轮胎型号、轮胎位置。

  1. 类Car有一个字符串类型的属性,记录车的型号;

有属性轮子数组wheels[]和engine,分别是Wheel类对象数组和Engine类对象;

有构造方法,参数是三个字符串,分别表示轿车的型号、轮胎型号和发动机的型号;

有方法changeWheel()可以改变指定轮胎的型号;

有方法start(),

先输出轿车型号和“firing”的字符串,

然后调用engine的start(),

再调用所有轮胎的roll(),

最后显示轿车型号和“running”。

  1. 要求编程实现类Car、类Wheel和类Engine,

定义Test类,

定义Car类对象,

执行run()方法,

显示要求信息。

9 . 提高:

使用前面定义点MyPoint类,

增加两个重载距离方法,点到点,点到线。

4. 继承、接口与泛型

子类与父类

子类的继承性

子类的子类对象的构造过程

子类的成员变量隐藏和方法的重写

子类的super关键字

子类的final类与final方法

子类的对象的上转型对象

前面讲的是 类和对象

面向对象

封装、继承、多态

1、封装

封装,设计类

2、继承

3、多态

泛化

1、正方形、矩形 不是 泛化而来,

2、特例: 可以在程序中,写 圆 继承于 点

点 是 圆的特例,圆 经过泛化后,得不到点

程序正确

1、程序实现正确

2、语义正确

Java API 改不了(过时)

最典型的过时方法,Date,以后使用 开林特

读 Java api 语言 问题、错误, 小册子

4.1 作业

1、定义电话类Phone,

属性有电话号码code,

方法包括一个带参的构造方法,

一个普通方法display(),用于显示code属性值。

以Phone类为父类,继承得到手机类MobilePhone,

要求

新增属性品牌brand和机主身份证号ownerId,

新增普通方法public double pay(int time,double price),用于返回话费计算结果(time*price)。

设计测试类创建MobilePhone类对象,并计算话费。

要点提示:

  1. 参考程序13.1实现父类Phone;

  2. 参考程序13.2实现子类MobilePhone。

2、大学课程包括 理论课 和 实践课,

设计 理论课类ClassCourse的属性有:

编号code,类型String; 名称name,类型String; 学时hours,类型int。

设计一个 实践课类LaboratoryCourse属性有:

编号code,类型String; 名称name,类型String; 周数weeks,类型int。

两类课程都有方法display(),显示课程信息。

要求对两类课程进行 泛化 得到 课程类Course,

使用 课程类 作为基类,继承 基类 设计出 理论课 和 实践课 对应的类。

设计测试类,定义三个类的对象,实例化,显示各类课程的信息。

3、设计 学生类Student 和 它的 子类Undergraduate,

要求:

①Student类

有属性:姓名name 和 年龄age,

有一个包含两个参数的 构造方法,为 两个属性 赋初值,

一个 display() 方法 输出 Student的 属性信息;

②Undergraduate类增加一个属性:专业major,类型String。

有一个包含三个参数的构造方法,

一个display()方法输出Undergraduate的属性信息;

③在测试类中

分别创建Student对象 和 Undergraduate对象,

调用它们的 display()方法 显示 学生信息。

4、宠物猫Cat属性有:名字name,类型String, 颜色cColor,类型String, 年龄age,类型int;

方法有两个:吃eat(),叫shout()。

宠物狗Dog属性有:名字name,类型String, 种类species,类型String, 年龄age,类型int;

方法有吃eat(),叫shout(),两个方法分别显示不同的字符串。

在此基础上进行 泛化,得到宠物类Pet;

属性有:名字name,类型String, 年龄age,类型int;

方法有吃eat(),叫shout()。

设计测试类,定义三个类的对象,实例化,显示各自的信息。

5. 抽象类&接口

5.1 final

final 用在修饰下面3个东西, 前面

1, 修饰 类,则 类 不可以再被 继承,例如,不能有 extends String

2, 修饰 方法,则 方法 不可以再被 重写

3, 修饰 属性,则 属性 不可以再被 修改

public final int size = 10;   // size不可修改

5.2 上下转型

向上转型,向下转型

动态绑定,实现了多态

同一个东西,有不同的表现,叫多态

Pet p = new Pet("huang", 2);
p.eat();

// 在不同的语境下,p调用不同实例的eat()
Pet::eat();
Cat::eat();
Dog::eat();

现代程序设计工程,不用 继承 实现 代码复用 功能,

现代程序设计工程,复用 用 组合

继承 用来 做 多态 和 框架

框架的核心

先写的代码Pet p,调用后来的代码

前面的代码, 调用后面的代码

5.3 抽象类

抽象类 和 抽象方法

上面是 抽象类,接口

下面是 具体类

抽象类,

抽象方法, 继承这个 抽象类 的时候, 必须 重写这个方法,强制重写

概念的抽象 ==> 抽象类

5.4 接口

一个类 通过使用关键字 implements 声明 自己实现 一个 或 多个接口。

接口名字的规范写法: 动词+able

class A implements Printable, Addable;
A a = new A();

a 可以是 Printable,也可是 Addable 的对象

很多人开发项目的时候

先写接口,

写接口(实现接口的功能) 的人A小组, 写接口

用接口的人B小组, 正常用就可以了, 测试的时候,可以 先通过写 假的 接口, 等到A小组的人写完之后, 把正确的 实现接口功能的代码, 替换 测试的 假的接口,就可以了

什么叫多态?

下节课,讲 异常类

前面封装、继承、多态, 讲完了

后面再讲一些 面向对象的

再后面,讲一些 Java应用

5.5 作业

第六周作业:

1、修改子类 宠物猫Ca t和 宠物狗Dog,重写方法 吃eat() 和 方法 叫shout()。

在前面 类Person 基础上 增加 喂养方法feed(Pet p),

给这个方法传递 不同的 子类对象实例,喂养方法调用对应宠物对象的方法 吃eat() 和 叫shout()。

设计 测试类Test,利用 宠物 对象多态,显示 不同结果。

提高:有兴趣的读者可以继续改进这个程序,设计 学生类Student 继承 Person,实现 学生 喂养 宠物。

Tips:

1、考察: 多态性

修改Cat类, Dog类

测试类中,

往里面,扔谁的实例

将来可以传递 Pet的实例,

feed方法里面 调用 写2个方法eat(), shout(),s

Test里面,调用 person.feed() 参数,可以传递 Pet的实例, Cat的实例, Dog的实例

传递不同,显示不同

2、修改MobilePhone类,对 父类 的 display()方法 进行 重写,显示 brand 和 ownerId 属性的值。

Test类 中定义 Phone类 和 MobilePhone类 的对象,并分别 调用display()方法。

要点提示,重写 MobilePhone类 的 display() 方法。

Tips:

2、

调用子类的display()方法

3、修改 宠物类Pet 为 抽象类,方法 吃eat() 和 方法 叫shout() 为抽象方法。

定义 宠物类Pet 的 子类 宠物猫Cat 和 宠物狗Dog,属性 和 方法与 实做程序14.5 相同。

设计 测试类Test,利用宠物对象 多态,显示 不同结果。

Tips:

3、考察: 抽象类,抽象方法

提示:

4、设计两个接口,

接口 Eatable 有一个方法吃eat(),接口 Shoutable 有一个方法 叫shout()。

设计 宠物猫类Cat 和 宠物狗类Dog 分别 实现 两个接口,重写 对应的接口方法。

定义 类Person,有一个 饲养宠物方法 feed(Eatable ea),一个听声音方法 hear(Shoutable sa),显示 一个字符串。

设计 测试类Test,利用宠物对象 多态,显示 饲养不同宠物 和 听到 不同宠物 的叫声。

Tips:

4、考察: 接口

显示字符串

6. 异常类&包

6.1 异常类

try-catch

try-catc

你可能感兴趣的:(Java)