标签:显示 balance inpu course one 父类继承 out temp 超过
class MianShiTi{ String str = new String("good idear"); //创建字符串对象; char[] ch = {‘a‘,‘b‘,‘c‘,‘d‘}; //创建数组; public static void main(String[] args){ MianShiTi m = new MianShiTi(); //创建一个对象; exchange(m.str, m.ch); //m.str没有变,m.ch的[1]变了 System.out.println(m.str); //good idear ,它们是两个无关的str System.out.println(m.ch); //a*cd String s = "bbbb"; StringBuffer b = new StringBuffer("bbbb"); change(s,b); //s不可变,s仍然"bbbb" //b的内容就从"bbbb" ---> "aaaa" System.out.println(s+b); //bbbbaaaa } public static void exchange(String str, char[] ch){ //两个都是引用数据类型String和char[]数组, str = "Hello World"; //字符串对象是不可变的,一旦修改str=xxx,就是产生新的对象,和原来的"实参"无关 System.out.println(str); //Hello World ch[1] = ‘*‘; //数组元素是可变的,ch形参和上面的m.ch实参指向的是同一个数组,所以ch[1]修改,就是修改m.ch[1] System.out.println(ch); //a*cd } private static void change(String s, StringBuffer b){ //两个形参为String类型和 类 都是引用数据类型 s = "aaa"; b.setLength(0);//b的长度设置为0,相当于清空原来b中内容 b.append("aaaa");//append表示追加,又追加了aaaa } }
public class MainTest{ public static void test(String str){ str = "hello"; } public static void main(String[] args){ String str = "beijing"; test(str); System.out.println(str); //beijing } }
/* (1)声明一个日期类型MyDate:有属性:年year,月month,日day (2)创建2个日期对象,分别赋值为:你的出生日期,你对象的出生日期,放到数组中 (3)遍历显示 */
public class TestMydate { public static void main(String[] args) { MyDate[] arr = new MyDate[2]; //创建长度为2的数组 arr[0] = new MyDate(); //引用数据类型需要给它赋值一个对象; arr[0].year = 1994; arr[0].month = 7; arr[0].day = 7; arr[1] = new MyDate(); arr[1].year = 1996; arr[1].month = 7 ; arr[1].day = 7; for(MyDate num : arr){ System.out.println(num.year + "-" + num.month + "-" + num.day); }
class TestTeacher{ public static void main(String[] args){ //用数组来管理属性,创建的对象,排序等 Teacher[] arr = new Teacher[5]; //声明一个一维数组,来存储5个Teacher的对象; arr[0] = new Teacher(); //arr[0]代表一个元素,是Teacher类型(引用数据类型),需要赋值为一个Teacher对象; arr[0].name = "kris"; arr[0].age = 18; arr[0].gender = ‘男‘; arr[0].course = "java"; Teacher t2 = new Teacher(); t2.name = "alex"; t2.age = 11; t2.gender = ‘女‘; t2.course = "Mysql"; arr[1] = t2; for(int i = 0;i < arr.length;i++){ //arr[i]是一个Teacher的对象 //Exception in thread "main" java.lang.NullPointerException空指针异常 //一旦报NullPointerException,说明对象是null //arr[i]是否是null? //if(arr[i] != null){ System.out.println(arr[i].name + "\t" + arr[i].age + "\t" + arr[i].gender + "\t" +arr[i].course); //} } } } class Teacher{ String name; int age; char gender; String course; }
练习2 声明一个圆类Circle,有属性半径radius 声明一个测试类TestCircleArray, 在main方法中,创建一个Circle数组,长度为3,并创建三个Circle对象放到数组中, 遍历显示数组,显示每一个圆的半径、面积 然后在对Circle数组进行排序,按照半径从小到大,再次遍历显示数组,显示每一个圆的半径、面积 */ class TestCircle2{ public static void main(String[] args){ Circle[] arr = new Circle[3]; //创建一个Circle数组,长度为3,默认值都为null //创建3个Circle对象放到数组中, 动态输入创建 java.util.Scanner input = new java.util.Scanner(System.in); for(int i = 0; i < arr.length;i++){ arr[i] = new Circle(); //先创建圆Circle的对象 System.out.print("请输入圆的半径:"); arr[i].radius = input.nextDouble(); System.out.println("半径" + arr[i].radius + "\t" + "面积" + Math.PI * arr[i].radius * arr[i].radius); } /* //静态输入 arr[0] = new Circle(); arr[1] = new Circle(); arr[2] = new Circle(); arr[0].radius = 2.0; arr[1].radius = 3.0; arr[2].radius = 1.0; */ //冒泡排序按从小到大顺序排,需要排arr.length-1次,大的就往后 //第一轮:i=1,j=0,1两次 //第二轮:i=2,j=1一次 for(int i = 1; i < arr.length;i++){ for(int j = 0;j < arr.length-i;j++){ //如果前面的圆的半径比较后面的圆的半径大,就交换两个圆 if(arr[j].radius > arr[j+1].radius){ //比较的是圆的半径,对象需要.半径属性 Circle temp = arr[j];//temp的类型和arr[j]和arr[j+1]一样,它俩是Circle arr[j] = arr[j+1]; arr[j+1] = temp; } } } for(int i = 0; i < arr.length;i++){ System.out.println(arr[i].radius); } } } class Circle{ double radius; }
练习3 (1)声明一个丈夫类型Husband,有属性:姓名,年龄,妻子,其中妻子是Wife类型 (2)声明一个妻子类型Wife,有属性:姓名,年龄,丈夫,其中丈夫是Husband类型 (3)创建一个丈夫对象,创建一个妻子对象,并显示他们的信息 */ class Test3{ public static void main(String[] args){ Husband hus = new Husband(); //hus丈夫对象; hus.name = "kris"; hus.age = 20; Wife wif = new Wife(); //wif妻子对象; wif.name = "xka"; wif.age = 19; hus.qi = wif; //qi为引用数据类型,必须给它赋值一个对象; wif.fu = hus; System.out.println("丈夫的信息:"+hus.name + "\t" + hus.age + "\t" + "妻子的信息:" + hus.qi.name + hus.qi.age); System.out.println("妻子的信息:" + wif.name + "\t" + wif.age + "\t" +"丈夫的信息:"+ wif.fu.name); } } class Husband{ String name; int age; Wife qi; } class Wife{ String name; int age; Husband fu; }
/* 2、练习2 (1)声明一个日期类型MyDate,包含年、月、日 (2)声明一个员工类,包含属性:姓名、薪资、生日,其中生日是MyDate类型 (3)声明一个测试类,在main方法中,声明一个数组,创建三个员工对象,并为属性赋值 (4)遍历显示员工信息,并且按照生日排序 (5)遍历显示员工信息,按照薪资排序 */ class Test2{ public static void main(String[] args){ Staff[] arr = new Staff[3]; //声明一个数组,创建员工对象,并为他们赋值; java.util.Scanner input = new java.util.Scanner(System.in); for(int i = 0; i < arr.length; i++){ arr[i] = new Staff(); System.out.print("请输入员工姓名:"); arr[i].name = input.next(); System.out.print("员工薪资:"); arr[i].salary = input.nextInt(); System.out.println("请输入员工生日"); arr[i].birthday = new MyDate(); //birthday为引用数据类型,必须给它赋值一个对象; System.out.print("年:"); arr[i].birthday.year = input.nextInt(); System.out.print("月:"); arr[i].birthday.month = input.nextInt(); System.out.print("日:"); arr[i].birthday.day = input.nextInt(); } System.out.println("姓名\t" + "薪资\t" + "生\t日"); //遍历显示员工信息;foreach循环 //for(元素的数据类型 元素名 : 数组名){} for(Staff num : arr){ //System.out.println(arr[i].name + "\t" + arr[i].salary + "\t" + arr[i].birthday.year + "-" + arr[i].birthday.month + "-" + arr[i].birthday.day); System.out.println(num.name + "\t" + num.salary + "\t" + num.birthday.year + "-" + num.birthday.month + "-" + num.birthday.day); } //冒泡排序;按员工生日排序;从小到大 for (int j = 1;j < arr.length;j++){ for(int i = 0;i < arr.length-i; i++){ if(arr[i].birthday.year > arr[i+1].birthday.year){ //先比较年year,大的年龄小 Staff temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; }else if(arr[i].birthday.year == arr[i+1].birthday.year){ if(arr[i].birthday.month > arr[i+1].birthday.month){ Staff temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; }else if(arr[i].birthday.month == arr[i+1].birthday.month){ if(arr[i].birthday.day > arr[i+1].birthday.day){ Staff temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } } } } //遍历排序之后的 System.out.println("排序之后的:"); System.out.println("姓名\t" + "薪资\t" + "生\t日"); for(int i = 0;i < arr.length; i++){ System.out.println(arr[i].name + "\t" + arr[i].salary + "\t" + arr[i].birthday.year + "-" + arr[i].birthday.month + "-" + arr[i].birthday.day); } } } class MyDate{ int year; int month; int day; } class Staff{ String name; double salary; MyDate birthday; }
类的继承,super
1、写一个名为Account的类模拟账户。该类的属性和方法如下图所示。该类包括的属性:账号id,余额balance,年利率annualInterestRate;包含的方法:访问器方法(getter和setter方法),返回月利率的方法getMonthlyInterest(),取款方法withdraw(),存款方法deposit()。
写一个测试类TestAccount:在用户程序中,创建一个账号为11223344、余额为20000、年利率4.5%的Account对象。使用withdraw方法提款30000元,并打印余额。
再使用withdraw方法提款2500元,使用deposit方法存款3000元,然后打印余额和月利率。
2、创建Account类的一个子类CheckAccount代表可透支的账户,该账户中定义一个属性overdraft代表可透支限额,。在CheckAccount类中重写withdraw方法。
写一个用户程序测试CheckAccount类。在用户程序中,创建一个账号为11223344、余额为20000、年利率4.5%,可透支限额为5000元的CheckAccount对象。
提示:
(1) 子类CheckAccount的构造方法需要将从父类继承的3个属性和子类自己的属性全部初始化。
(2) 父类Account的属性balance被设置为private,但在子类CheckAccount的withdraw方法中需要修改它的值
最后思考:如果将父类Account的属性balance设置为protected,会怎么样?
package com.atguigu.variable; import com.atguigu.inherited.Account; public class CheckAccount extends Account { private double overdraft; public CheckAccount() { super(); } public CheckAccount(String id, double balance, double annualInterestRate, double overdraft) { super(id, balance, annualInterestRate); this.overdraft = overdraft; } public double getOverdraft() { return overdraft; } public void setOverdraft(double overdraft) { this.overdraft = overdraft; } /* public void withdraw(double money){ if(money < 0){ System.out.println("输入有误"); }if(money < getBalance()){ super.withdraw(money); //正常取,可以使用父类里边的方法withdraw }else{ //可以透支 if(money > getBalance() + overdraft){ System.out.println("超过可透支额度"); }else{ System.out.println("剩余可透支额度为:" + (overdraft -= money - getBalance())); //取后剩余的透支额度; //超过的额度(money - balance); setBalance(0); System.out.println("哎呀取完了,账户余额为:" + getBalance()); } } }*/ // 如果将父类Account的属性balance设置为protected,表在其他包的子类里边也可以使用 public void withdraw(double money){ if(money < 0){ System.out.println("您的输入有误"); }if(money < balance){ super.withdraw(money); }else{ if(money > balance + overdraft){ System.out.println("超过卡的取款额度"); }else{ System.out.println("可透支额度剩余:" + (overdraft -= money -balance)); setBalance(0); } } } }
package com.atguigu.variable; import com.atguigu.inherited.Account; public class TestAccount { public static void main(String[] args) { // TODO Auto-generated method stub Account a = new Account("11223344", 20000, 0.045); CheckAccount c = new CheckAccount("11223344", 20000, 0.056, 5000); c.withdraw(28000);//传参调用withdraw方法,它是没有返回值的。 //System.out.println(a.getBalance()); System.out.println(a.deposit(2000)); } }
标签:显示 balance inpu course one 父类继承 out temp 超过
原文地址:https://www.cnblogs.com/shengyang17/p/10004038.html