子类与继承 作业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