子类与继承 作业1
SIM
import java.util.Scanner;
public class Example5_13 {
public static void main(String args[]) {
MobileTelephone telephone = new MobileTelephone ();
SIM sim=new SIMOfChinaMobile();
Scanner scanner = new Scanner(System.in);
System.out.println("请输入移动卡手机号:");
sim.setNumber(scanner.next());
telephone.useSIM(sim);
telephone.showMess();
sim=new SIMOfChinaUnicom();
System.out.println("请输入联通手机号:");
sim.setNumber(scanner.next());
telephone.useSIM(sim);
telephone.showMess();
}
}
abstract class SIM {
public abstract void setNumber(String n);
public abstract String giveNumber();
public abstract String giveCorpName();
}
class SIMOfChinaMobile extends SIM {
String number;
public void setNumber(String n) {
number = n;
}
public String giveNumber() {
return number;
}
public String giveCorpName() {
return "中国移动";
}
}
class SIMOfChinaUnicom extends SIM {
String number;
public void setNumber(String n) {
number = n;
}
public String giveNumber() {
return number;
}
public String giveCorpName() {
return "联通";
}
}
class MobileTelephone {
SIM card;
public void useSIM(SIM card) {
this.card=card;
}
public void showMess() {
System.out.println("使用的卡是:"+card.giveCorpName()+"提供的");
System.out.println("手机号码是:"+card.giveNumber());
}
}

平均数
import java.util.Scanner;
public class Example5_7 {
public static void main(String args[]) {
Average aver=new Average();
System.out.println("请输入一个数n");
Scanner scanner = new Scanner(System.in);
aver.n = scanner.nextInt();
float resultOne=aver.f();
float resultTwo=aver.g();
System.out.println("resultOne="+resultOne);
System.out.println("resultTwo="+resultTwo);
}
}
class Sum {
int n;
float f() {
float sum=0;
for(int i=1;i<=n;i++)
sum=sum+i;
return sum;
}
}
class Average extends Sum {
int n;
float f() {
float c;
super.n=n;
c=super.f();
return c/n;
}
float g() {
float c;
c=super.f();
return c/2;
}
}
输入字符串打印输出
import java.util.Scanner;
public class Example5_8 {
public static void main(String args[]) {
System.out.println("请输入姓名:");
Scanner scanner = new Scanner(System.in);
String next = scanner.next();
System.out.println("请输入年龄:");
int nextInt =scanner.nextInt();
System.out.println("请输入婚否:");
String next1 = scanner.next();
UniverStudent zhang=new UniverStudent(nextInt,next,next1);
}
}
class Student {
int number;String name;
Student() {
}
Student(int number,String name) {
this.number=number;
this.name=name;
System.out.println("我的名字是:"+name+ "学号是:"+number);
}
}
class UniverStudent extends Student {
String marriage;
UniverStudent(int number,String name,String b) {
super(number,name);
marriage=b;
System.out.println("婚否="+marriage);
}
}
计算圆的面积
import java.util.Scanner;
public class Example5_9 {
public static void main(String args[]) {
A a=new A();
System.out.println("请输入圆半径:");
Scanner scanner = new Scanner(System.in);
System.out.println("面积:"+a.getArea(scanner.nextDouble()));
}
}
class A {
final double PI=3.1415926;// PI是常量
public double getArea(final double r) {
return PIrr;
}
}
输入字符串和两个数字
import java.util.Scanner;
public class Example5_10 {
public static void main(String args[]) {
Anthropoid monkey;
People geng = new People();
monkey = geng ; //monkey是People对象geng的上转型对象
System.out.println("请输入字符串 ");
Scanner scanner = new Scanner(System.in);
monkey.crySpeak(scanner.next());
People people=(People)monkey; //把上转型对象强制转化为子类的对象
System.out.println("请输入两个数字:");
people.computer(scanner.nextInt(),scanner.nextInt());
}
}
class Anthropoid {
void crySpeak(String s) {
System.out.println(s);
}
}
class People extends Anthropoid {
void computer(int a,int b) {
int c=a*b;
System.out.println(c);
}
void crySpeak(String s) {
System.out.println("***"+s+"***");
}
}
对输入字符进行打印
import java.util.Scanner;
public class Example5_11 {
public static void main(String args[]) {
Animal animal;
animal = new Dog();
System.out.println("请输入狗叫:");
Scanner scanner = new Scanner(System.in);
animal.cry(scanner.next());
animal=new Cat();
System.out.println("请输入猫叫:");
animal.cry(scanner.next());
}
}
class Animal {
void cry(String call) {
}
}
class Dog extends Animal {
void cry(String call) {
System.out.println(call);
}
}
class Cat extends Animal {
void cry(String call) {
System.out.println(call);
}
}
对输入字符串进行打印
import java.util.Scanner;
public class Example5_12 {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
GirlFriend girl = new ChinaGirlFriend(); //girl是上转型对象
Boy boy = new Boy();
boy.setGirlfriend(girl);
boy.showGirlFriend(scanner);
girl = new AmericanGirlFriend(); //girl是上转型对象
boy.setGirlfriend(girl);
boy.showGirlFriend(scanner);
}
}
abstract class GirlFriend {
abstract void speak(Scanner scanner);
abstract void cooking(Scanner scanner);
}
class ChinaGirlFriend extends GirlFriend {
void speak(Scanner scanner){
System.out.println("请输入中国女孩说的话:");
System.out.println(scanner.next());
}
void cooking(Scanner scanner){
System.out.println("请输入中国女孩做的饭:");
System.out.println(scanner.next());
}
}
class AmericanGirlFriend extends GirlFriend {
void speak(Scanner scanner){
System.out.println("请输入美国女孩说的话:");
System.out.println(scanner.next());
}
void cooking(Scanner scanner){
System.out.println("请输入美国女孩做的饭:");
System.out.println(scanner.next());
}
}
class Boy {
GirlFriend friend;
void setGirlfriend(GirlFriend f){
friend = f;
}
void showGirlFriend(Scanner scanner) {
friend.speak(scanner);
friend.cooking(scanner);
}
}
二 接口
计算输入数字的和
import java.util.Scanner;
public class Example6_1 {
public static void main(String args[]) {
China zhang;
Japan henlu;
zhang=new China();
henlu=new Japan();
System.out.println("输入zhang的学号、数字n(计算1..n的和):");
System.out.println("输入henlu的学号、数字n(计算n+MAX的和):");
Scanner scanner = new Scanner(System.in);
int a,b;
a=scanner.nextInt();
b=scanner.nextInt();
int c,d;
d = scanner.nextInt();
c = scanner.nextInt();
zhang.number=a+Computable.MAX;
henlu.number=c+Computable.MAX;
System.out.println("----------输出-----------");
System.out.println("zhang的学号"+zhang.number+",zhang求和结果"+zhang.f(b));
System.out.println("henlu的学号"+henlu.number+",henlu求和结果"+henlu.f(d));
}
}
interface Computable {
int MAX = 46;
int f(int x);
}
class China implements Computable { //China类实现Computable接口
int number;
public int f(int x) { //不要忘记public关键字
int sum=0;
for(int i=1;i<=x;i++) {
sum=sum+i;
}
return sum;
}
}
class Japan implements Computable { //Japan类实现Computable接口
int number;
public int f(int x) {
return MAX+x;
}
}
对输入的字符串进行打印输出
import java.util.Scanner;
public class Example6_2 {
public static void main(String args[]) {
ShowMessage sm; //声明接口变量
sm=new TV(); //接口变量中存放对象的引用
Scanner scanner = new Scanner(System.in);
System.out.println("请输入TV的商标");
sm.show(scanner.next()); //接口回调。
sm=new PC(); //接口变量中存放对象的引用
System.out.println("请输入PC的商标");
sm.show(scanner.next()); //接口回调
}
}
interface ShowMessage {
void show(String s);
}
class TV implements ShowMessage {
public void show(String s) {
System.out.println(s);
}
}
class PC implements ShowMessage {
public void show(String s) {
System.out.println(s);
}
}
对输入的字符串进行拼接打印输出
import java.util.Scanner;
public class Example6_3 {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
Bus bus101 = new Bus();
Taxi buleTaxi = new Taxi();
Cinema redStarCinema = new Cinema();
MoneyFare fare;
ControlTemperature temperature;
fare = bus101;
System.out.println("请输入公交车采用刹车技术和车票价(元):");
bus101.brake(scanner.next());
fare.charge(scanner.next());
fare = buleTaxi;
temperature = buleTaxi;
System.out.println("请输入出租车采用刹车技术、车票价(元)、安装空调样式:");
buleTaxi.brake(scanner.next());
fare.charge(scanner.next());
temperature.controlAirTemperature(scanner.next());
fare = redStarCinema;
temperature = redStarCinema;
System.out.println("请输入电影院票价(元)、安装空调样式:");
fare.charge(scanner.next());
temperature.controlAirTemperature(scanner.next());
}
}
abstract class MotorVehicles {
abstract void brake(String s);
}
interface MoneyFare {
void charge(String c);
}
interface ControlTemperature {
void controlAirTemperature(String t);
}
class Bus extends MotorVehicles implements MoneyFare {
void brake(String s) {
System.out.println("公共汽车使用"+s+"刹车技术");
}
public void charge(String c) {
System.out.println("公共汽车:"+c+"元/张,不计算公里数");
}
}
class Taxi extends MotorVehicles implements MoneyFare,ControlTemperature {
void brake(String s) {
System.out.println("出租车使用"+s+"刹车技术");
}
public void charge(String c) {
System.out.println("出租车:"+c+"元/公里,起价3公里");
}
public void controlAirTemperature(String t) {
System.out.println("出租车安装了"+t+"空调");
}
}
class Cinema implements MoneyFare,ControlTemperature {
public void charge(String s) {
System.out.println("电影院:门票,"+s+"元/张");
}
public void controlAirTemperature(String t) {
System.out.println("电影院安装了"+t+"空调");
}
}
计算两个数的算数平均值和几何平均值
import java.util.Scanner;
public class Example6_4 {
public static void main(String args[]) {
CompurerAverage computer;
double a=11.23,b=22.78;
computer = new A();
System.out.println("请输入两个数:");
Scanner scanner = new Scanner(System.in);
a = scanner.nextDouble();
b = scanner.nextDouble();
double result = computer.average(a,b);
System.out.printf("%5.2f和%5.2f的算术平均值:%5.2f\n",a,b,result);
computer = new B();
result= computer.average(a,b);
System.out.printf("%5.2f和%5.2f的几何平均值:%5.2f",a,b,result);
}
}
interface CompurerAverage {
public double average(double a,double b);
}
class A implements CompurerAverage {
public double average(double a,double b) {
double aver=0;
aver=(a+b)/2;
return aver;
}
}
class B implements CompurerAverage {
public double average(double a,double b) {
double aver=0;
aver=Math.sqrt(a*b);
return aver;
}
}
函数提示语句,打印字符串,打印输出
import java.util.Scanner;
public class Example6_5 {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
KindHello kindHello=new KindHello();
kindHello.lookHello(new Chinese(), scanner);
kindHello.lookHello(new English(), scanner);
}
}
interface SpeakHello {
void speakHello(Scanner scanner);
}
class Chinese implements SpeakHello {
public void speakHello(Scanner scanner) {
System.out.println("中国人习惯问候语:");
System.out.println("中国人习惯问候语:"+scanner.nextLine());
}
}
class English implements SpeakHello {
public void speakHello(Scanner scanner) {
System.out.println("英国人习惯问候语:");
System.out.println("英国人习惯问候语:"+scanner.nextLine());
}
}
class KindHello {
public void lookHello(SpeakHello hello,Scanner scanner) { //接口类型参数
hello.speakHello(scanner); //接口回调
}
}
实现多态
import java.util.Scanner;
//基类Shape建立了一个通用接口——也就是说,所有(几何)形状都可以描绘和删除。
class Shape {
void draw() {
}
void erase() {
}
}
//派生类覆盖了draw方法,为每种特殊类型的几何形状都提供了独一无二的行为。
class Circle extends Shape {
@Override // @Override注解,表示覆盖父类方法
void draw() {
System.out.println("Circle.draw()");
}
@Override
void erase() {
System.out.println("Circle.erase()");
}
}
class Square extends Shape {
@Override
void draw() {
System.out.println("Square.draw()");
}
@Override
void erase() {
System.out.println("Square.erase()");
}
}
class Triangle extends Shape {
@Override
void draw() {
System.out.println("Triangle.draw()");
}
@Override
void erase() {
System.out.println("Triangle.erase()");
}
}
//下面对动态绑定进行测试如下:
public class Example7_100 {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
Shape[] shape = new Shape[3];
int n;
for (int i = 0; i < shape.length; i++) {
n = reader.nextInt();
switch (n) {
case 0:
shape[i] = new Circle();
break;
case 1:
shape[i] = new Square();
break;
case 2:
shape[i] = new Triangle();
}
}
for (Shape oneS : shape) { // 增强for循环,应在JDK 5及其以上版本运行
oneS.draw();
}
}
}
抽象类的运用
import java.util.Scanner;
public class Example7_101 {
static public void main(String[] args) {
Scanner reader = new Scanner(System.in);
Driver a = new FemaleDriver(reader.nextInt());
Driver b = new MaleDriver();
a.drives();
b.drives();
}
}
class FemaleDriver extends Driver {
public FemaleDriver(int a) {
}
@Override
public void drives() {
System.out.println("A Female driver drives a vehicle.");
}
}
class MaleDriver extends Driver {
public MaleDriver() {
}
@Override
public void drives() {
System.out.println("A male driver drives a vehicle.");
}
}
abstract class Driver {
public Driver() {
}
public abstract void drives();
}
三 内部类与异常类-作业1
计算输入4个数的和
import java.util.Scanner;
public class Example7_6 {
public static void main (String args[ ]) {
int [] score ={0,0,0,0};
System.out.println("请输入3个正数,1个负数");
Scanner scanner = new Scanner(System.in);
for(int i=0;i<4;i++){
score[i] = scanner.nextInt();
}
int sum=0;
for(int number:score) {
assert number>0:"负数不能是成绩";
sum=sum+number;
}
System.out.println("总成绩:"+sum);
}
}
处理数组越界异常
import java.util.Scanner;
/**
* TODO: 定义一个长度为8的课程数组,随机输入课程的序号,获取课程的名称,进行输出,如果不存在则捕捉数组越界的异常
* 如:输入:12,12已结超过8门课程的范围,捕获异常后打印: java.lang.ArrayIndexOutOfBoundsException: 12
* 输入:2,输出:英语
*/
public class Example7_149 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入课程的序号");
int index = sc.nextInt();
String[] courses = {"数学","语文","英语","计算机","物理","化学","生物","地理"};
try {
String course = courses[index];
System.out.println(course);
//TODO:输入课程的序号,超过数组最大长度,捕捉数组越界异常
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println(e);
}
}
}
自定义异常
import java.util.Scanner;
/**
* TODO: 输入账号名称,如果大于10,抛出“账号名称超长”的自定义异常, 如果小于5,抛出“账号名称超短”的自定义异常
* 参考“账号名称超长异常(StringTooLongException)”,请编写一个账号名称超短的自定义异常(类名:StringTooShortException)
* 例如:输入:红色宝马 输出: StringTooShortException: 账号名称超短,必须大于5个字符
* 例如:输入:红红黄黄蓝蓝 输出:账号名称校验通过
* 例如:输入:红红黄黄蓝蓝绿绿紫紫白白 输出:StringTooLongException: 账号名称超长,必须小于10个字符
*/
public class Example7_152 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入账号名称");
String str = sc.next();
try {
if (str.length() > 10) {
//抛出账号名称超长的自定义异常
throw new StringTooLongException();
}
if (str.length() < 5){
//抛出账号名称超短的自定义异常
throw new StringTooShortException();
}
System.out.println("账号名称校验通过");
} catch (Exception e) {
System.out.println(e);
}
}
}
/**
* 自定义异常,账号名称超长异常
*/
class StringTooLongException extends Exception{
public StringTooLongException(){
super("账号名称超长,必须小于10个字符");
}
}
/**
* 自定义异常,账号名称超短异常
*/
class StringTooShortException extends Exception{
public StringTooShortException(){
super("账号名称超短,必须大于5个字符");
}
}
自定义异常类,计算银行收入、支出
import java.util.Scanner;
public class Example7_5 {
public static void main(String args[]) {
Bank bank=new Bank();
try{
System.out.println("请输入银行收入、支出(收入正数 支出负数)😊;
Scanner scanner = new Scanner(System.in);
bank.income(scanner.nextInt(),scanner.nextInt());
System.out.printf("银行目前有%d元\n",bank.getMoney());
System.out.println("请输入银行收入、支出(收入负数或支出正数)😊;
bank.income(scanner.nextInt(),scanner.nextInt());
}
catch(BankException e) {
System.out.println("计算收益的过程出现如下问题:");
System.out.println(e.warnMess());
}
System.out.printf("银行目前有%d元\n",bank.getMoney());
}
}
class Bank {
private int money;
public void income(int in,int out) throws BankException {
if(in<=0||out>=0||in+out<=0) {
throw new BankException(in,out); //方法抛出异常,导致方法结束
}
int netIncome=in+out;
System.out.printf("本次计算出的纯收入是:%d元\n",netIncome);
money=money+netIncome;
}
public int getMoney() {
return money;
}
}
class BankException extends Exception {
String message;
public BankException(int m,int n) {
message="入账资金"+m+"是负数或支出"+n+"是正数,不符合系统要求.";
}
public String warnMess() {
return message;
}
}
输入三个数字,其中第二个数字为...
import java.util.Scanner;
public class Example7_4 {
public static void main(String args[ ]) {
int n = 0,m = 0,t = 1000;
try{
System.out.println("初始化n=0 m=0 t=1000");
System.out.println("请输入三个数给n,m,t赋值(其中输入m非法数字)");
Scanner scanner = new Scanner(System.in);
n = Integer.parseInt(scanner.next());
m = Integer.parseInt(scanner.next());
t = Integer.parseInt(scanner.next()); //t没有机会被赋值
}
catch(NumberFormatException e) {
System.out.println("发生异常:"+e.getMessage());
}
System.out.println("n="+n+",m="+m+",t="+t);
try{
System.out.println("故意抛出I/O异常!");
throw new java.io.IOException("我是故意的");
//System.out.println("这个输出语句肯定没有机会执行,所以必须注释掉,否则编译出错");
}
catch(java.io.IOException e) {
System.out.println("发生异常:"+e.getMessage());
}
}
}
根据输入装载量,计算货车
import java.util.Scanner;
class DangerException extends Exception {
final String message = "超载";
public String warnMess() {
return message;
}
}
class CargoBoat {
int realContent; //装载的重量
int maxContent; //最大装载量
public void setMaxContent(int c) {
maxContent = c;
}
public void loading(int m) throws DangerException {
realContent += m;
if(realContent>maxContent) {
throw new DangerException();
}
System.out.println("目前装载了"+realContent+"吨货物");
}
}
public class Example7_7 {
public static void main(String args[]) {
CargoBoat ship = new CargoBoat();
ship.setMaxContent(1000);
int m =0;
try{
Scanner scanner = new Scanner(System.in);
System.out.println("请输入装载量(最大量1000)");
m = scanner.nextInt();
ship.loading(m);
System.out.println("请输入装载量(最大量1000)");
m = scanner.nextInt();
ship.loading(m);
System.out.println("请输入装载量(最大量1000)");
m = scanner.nextInt();
ship.loading(m);
System.out.println("请输入装载量(最大量1000)");
m = scanner.nextInt();
ship.loading(m);
}
catch(DangerException e) {
System.out.println(e.warnMess());
System.out.println("无法再装载重量是"+m+"吨的集装箱");
}
finally {
System.out.printf("货船将正点启航");
}
}
}
//如有问题请致邮箱 rainhao@223@gmail.com