java之面向对象的继承、封装、多态运用
学习java的第十天
- 1. 学生有姓名、年龄,会学习
- 2、定义一个MyArrays工具类,定义三个静态方法实现:
- 3、定义汽车类 ,有牌照、价格和品牌属性。
- 4、 定义船类,属性:排水量、长度、速度,方法:航行
1. 学生有姓名、年龄,会学习
// 音乐接口,唱歌,吹笛子
// 运动接口,打篮球,跑步
// 三好学生继承学生,实现音乐、运动接口
public class Student {//学生有姓名、年龄,会学习private String name;private int age;public Student() {super();}public Student(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";}public void study() {System.out.println("名字为:"+getName()+",年龄为:"+getAge()+"的学生,正在学习");}}
public interface Music {
// 音乐接口,唱歌,吹笛子void changGe();void chuiDiZi();
}
public interface Sport {
// 运动接口,打篮球,跑步void daLanQiu();void PaoBu();
}
public class GoodStudent extends Student implements Music, Sport {
// 三好学生继承学生,实现音乐、运动接口@Overridepublic void daLanQiu() {}@Overridepublic void PaoBu() {}@Overridepublic void changGe() {}@Overridepublic void chuiDiZi() {}}
2、定义一个MyArrays工具类,定义三个静态方法实现:
// 1)数组排序
// static void sort(int[] numbers)
static void sort(int[] numbers) {for (int i = 0; i < numbers.length - 1; i++) {for (int j = 0; j < numbers.length - 1 - i; j++) {if(numbers[j] > numbers[j+1]){numbers[j] = numbers[j] ^ numbers[j+1];numbers[j+1] = numbers[j] ^ numbers[j+1];numbers[j] = numbers[j] ^ numbers[j+1];}}}for (int i : numbers) {System.out.print(i+",");}}
// 2) 求最大值
// static int max(int[] numbers)
static int max(int[] numbers) {int max1 = numbers[0]; for (int i = 0; i < numbers.length; i++) {if(numbers[i] > max1){numbers[i] = numbers[i] ^ max1;max1 = numbers[i] ^ max1;numbers[i] = numbers[i] ^ max1;}}return max1;}
// 3) 顺序查找
// static int search(int[] numbers,int key)
static int search(int[] numbers,int key) {
for (int i = 0; i < numbers.length - 1; i++) {if(numbers[i] == key){return i;}}return -1;}
3、定义汽车类 ,有牌照、价格和品牌属性。
// 汽车都有启动和计算租金的方法(轿车的租金=价格/365 + 100,卡车=价格/365 + 150,公交车=价格/365 + 200)
// 轿车、卡车和公交车继承汽车,按上面算法重写计算租金方法。
// 卡车另外有装货方法、公交车另外有报站方法。
// 创建几种汽车对象,并测试所有方法。
public abstract class Car {
// 3、定义汽车类 ,有牌照、价格和品牌属性。
// 汽车都有启动和计算租金的方法(轿车的租金=价格/365 + 100,卡车=价格/365 + 150,公交车=价格/365 + 200)private int num;//牌照private int price;//价格private String name;//品牌public Car() {super();// TODO Auto-generated constructor stub}public Car(int num, int price, String name) {super();this.num = num;this.price = price;this.name = name;}public int getNum() {return num;}public void setNum(int num) {this.num = num;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Car [num=" + num + ", price=" + price + ", name=" + name + "]";}public void qiDong(){System.out.println("牌照为:"+getPrice()+",价格为:"+getNum()+",品牌为:"+getName()+"的汽车,正在启动");}public abstract String jszj();}
public class JiaoChe extends Car {public JiaoChe() {super();}public JiaoChe(int num, int price, String name) {super(num, price, name);}@Overridepublic String jszj() {//轿车的租金=价格/365 + 100int num = getPrice()/365 + 100;return "轿车的租金为:"+num+"/月";}
public class CaChe extends Car {
//卡车另外有装货方法@Overridepublic String jszj() {//卡车=价格/365 + 150int num = getPrice()/365 + 150;return "卡车的租金为:"+num+"/月";}public CaChe() {super();}public CaChe(int num, int price, String name) {super(num, price, name);}public void zhuangHuo() {System.out.println("卡车正在装货");}
}
public class GongJiaoChe extends Car {
//公交车另外有报站方法public GongJiaoChe() {super();}public GongJiaoChe(int num, int price, String name) {super(num, price, name);}@Overridepublic String jszj() {//公交车=价格/365 + 200int num = getPrice()/365 + 200;return "公交车的租金为:"+num+"/月";}public void baoZhan() {System.out.println("公交车正在报站");}
}
public class Test1 {
// 5、扩展:
// 定义一个汽车数组,保存多辆汽车对象到数组中
// 输入牌照,在数组中查找该汽车
// 找到汽车后,调用汽车的启动和计算租金方法
// 如果是卡车或公交车,还要调用报站或装货方法public static void main(String[] args) {JiaoChe jiaoChe = new JiaoChe(1001,200000,"宝马");CaChe caChe = new CaChe(1101,400000,"五菱宏光");GongJiaoChe gongJiaoChe = new GongJiaoChe(1201,500000,"奔驰");
// jiaoChe.qiDong();
// System.out.println(jiaoChe.jszj());
// caChe.qiDong();
// System.out.println(caChe.jszj());
// caChe.zhuangHuo();
// gongJiaoChe.qiDong();
// System.out.println(gongJiaoChe.jszj());
// gongJiaoChe.baoZhan();Car [] arrgs = new Car[3];arrgs[0] = jiaoChe;arrgs[1] = caChe;arrgs[2] = gongJiaoChe;Scanner sc = new Scanner(System.in);System.out.println("请输入1001或1101或1201");int num = sc.nextInt();for (Car car : arrgs) {System.out.println(car);}for (int i = 0; i < arrgs.length-2;i+=3) {if(num == arrgs[i].getNum()){arrgs[i].qiDong();System.out.println(arrgs[i].jszj());//判断arr[i]对象是否是卡车类的对象if(arrgs[i] instanceof CaChe){CaChe c = (CaChe) arrgs[i];c.zhuangHuo();}//判断arr[i]对象是否是公交车类的对象else if(arrgs[i] instanceof GongJiaoChe){GongJiaoChe g = (GongJiaoChe) arrgs[i];g.baoZhan();}return;}}System.out.println("您的输入有误");}
}
4、 定义船类,属性:排水量、长度、速度,方法:航行
// 定义战斗接口,方法:开炮、发射导弹
// 定义潜水接口,方法:下潜、上浮
// 驱逐舰是一种船,能够战斗
// 潜水艇是一种船,能够战斗也能够潜水
// 编程模拟上面案例
public abstract class Chuan {
// 4、 定义船类,属性:排水量、长度、速度,方法:航行private int paiShuiLiang;//排水量private int changDu;//长度private int suDu;//速度public Chuan() {super();}public Chuan(int paiShuiLiang, int changDu, int suDu) {super();this.paiShuiLiang = paiShuiLiang;this.changDu = changDu;this.suDu = suDu;}public int getPaiShuiLiang() {return paiShuiLiang;}public void setPaiShuiLiang(int paiShuiLiang) {this.paiShuiLiang = paiShuiLiang;}public int getChangDu() {return changDu;}public void setChangDu(int changDu) {this.changDu = changDu;}public int getSuDu() {return suDu;}public void setSuDu(int suDu) {this.suDu = suDu;}@Overridepublic String toString() {return "Chuan [paiShuiLiang=" + paiShuiLiang + ", changDu=" + changDu + ", suDu=" + suDu + "]";}public void hangXing() {System.out.println("排水量为:"+getPaiShuiLiang()+",长度为:"+getChangDu()+",速度为:"+getSuDu()+"的船,正在航行");}}
public interface ZhanDou {
// 定义战斗接口,方法:开炮、发射导弹void kaiPao();void faSheDaoDan();
}
public interface QianShui {
// 定义潜水接口,方法:下潜、上浮void xiaQian();void shangFu();
}
public class QuZhuJian extends Chuan implements ZhanDou {
// 驱逐舰是一种船,能够战斗public QuZhuJian() {super();}public QuZhuJian(int paiShuiLiang, int changDu, int suDu) {super(paiShuiLiang, changDu, suDu);}@Overridepublic void kaiPao() {System.out.println("驱逐舰正在开炮");}@Overridepublic void faSheDaoDan() {System.out.println("驱逐舰正在发射导弹");}}
public class QianShuiTing extends Chuan implements ZhanDou, QianShui {
// 潜水艇是一种船,能够战斗也能够潜水public QianShuiTing() {super();}public QianShuiTing(int paiShuiLiang, int changDu, int suDu) {super(paiShuiLiang, changDu, suDu);}@Overridepublic void xiaQian() {System.out.println("潜水艇正在下潜");}@Overridepublic void shangFu() {System.out.println("潜水艇正在上浮");}@Overridepublic void kaiPao() {System.out.println("潜水艇正在开炮");}@Overridepublic void faSheDaoDan() {System.out.println("潜水艇正在发射导弹");}}
public class Test2 {public static void main(String[] args) {QuZhuJian quZhuJian = new QuZhuJian(200, 60, 80);QianShuiTing qianShuiTing = new QianShuiTing(300, 30, 60);quZhuJian.hangXing();quZhuJian.faSheDaoDan();quZhuJian.kaiPao();qianShuiTing.hangXing();qianShuiTing.faSheDaoDan();qianShuiTing.kaiPao();qianShuiTing.shangFu();qianShuiTing.xiaQian();}}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
