Java代码之8.构造方法与继承

1.编写Java程序,用于显示人的姓名和年龄,定义一个人类(Person),该类中应该有两个私有属性,姓名(name)和年龄(age)。定义构造方法,用来初始化数据成员。再定义显示(display)方法,将姓名和年龄打印出来。在main方法中创建人类的实例,然后将信息显示。

代码: 

package com.gzff;
public class Person {
      private String name;
      private int age;
      public Person() {  
      }
      public Person(String name,int age) {
    	  this.name=name;
    	  this.age=age;
      }
      public void display() {
    	  System.out.println("姓名是: "+name+",年龄是: "+age);
      }
  }
package com.gzff;

public class Testp {
	 public static void main(String[] args) {
	  		// TODO Auto-generated method stub 
	    	  Person p1=new Person("kino",23);
	    	  p1.display();
	    	 
		}
}

2.get方法和set方法

定义一个类,该类有两个成员变量(姓名和年纪),通过构造方法将其进行赋初值,并提供该成员的getXXX()和setXXX()方法
提示:假设有String name;则有

 public void setName(String name){
 	this.name = name;
 }

 public String getName(){
 	return this.name;
 }

代码: 

public class Person {
     private String name;
     public int age;
     
     public Person() {
    	 
     }
   public Person( String name,int age) {
	   this.name=name;
	   this.age=age;
   }
   
   public void setAge(int age) {
	   this.age=age;
   }
   
   public void getAge(int age) {
	   this.age=age;
   }
   
   public String setName(String name) {
	   return name;
   }
   
   public String getName(String name) {
	   return name;
   }
   
}

3、构造方法与重载

为"无名的粉"写一个类:class WuMingFen 要求:

 1.有三个属性:面码:String theMa 粉的份量(两):int quantity
 是否带汤:boolean likeSoup

 2.写一个构造方法,以便于简化初始化过程,如:
 WuMingFen f1 = new WuMingFen("牛肉",3,true);

 3.重载构造方法,使得初始化过程可以多样化:
 WuMingFen f2 = new WuMingFen("牛肉",2);

 4.如何使得下列语句构造出来的粉对象是酸辣面码、2两、带汤的?
 WuMingFen f3 = new WuMingFen();

 5.写一个普通方法:check(),用于查看粉是否符合要求。即:将对象的三个属性打印在控制台上。

 代码:

package com.gzff;

public class WuMingFen {

	private String theMa;
	private int quantity;
	private boolean likeSoup;
	
	
	public WuMingFen(String theMa,int quantity,boolean likeSoup){
		this.theMa = theMa;
		this.quantity = quantity;
		this.likeSoup = likeSoup;
	}
	
	public WuMingFen(String theMa,int quantity){
		this.theMa = theMa;
		this.quantity = quantity;
		this.likeSoup = true;
	}
	
	public WuMingFen(){
		this.theMa = "酸辣";
		this.quantity = 2;
		this.likeSoup = true;
	}

	public void check(){
		String str = likeSoup?"带汤":"不带汤";
		System.out.println("这是"+quantity+"两"+theMa+str+"粉");
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		WuMingFen wm1 = new WuMingFen("牛肉",3,true);
		wm1.check();
		
		WuMingFen wm2 = new WuMingFen("牛肉",2);
		wm2.check();
		
		WuMingFen wm3 = new WuMingFen();
		wm3.check();
		
	}
}

4、 构造方法的重载

在程序中,经常要对时间进行操作,但是并没有时间类型的数据。那么,我们可以自己实现一个时间类,来满足程序中的需要。

 定义名为MyTime的类,其中应有三个整型成员:时(hour),分(minute),秒(second), 为MyTime类定义构造方法,以方便创建对象时初始化成员变量。

 再定义diaplay方法,用于将时间信息打印出来。

 为MyTime类添加以下方法:

 addSecond(int sec)

 addMinute(int min)

 addHour(int hou)

 subSecond(int sec)

 subMinute(int min)

 subHour(int hou)

 分别对时、分、秒进行加减运算。

代码: 

package com.gzff;

public class MyTime {
   private int hour;
   private int minute;
   private int second;
   
   public MyTime() {
	   
   }
   
  public MyTime(int hour,int minute,int second) {
  this.hour=hour;
  this.minute=minute;
  this.second=second;
  }
  
  public void display() {
	  System.out.println("时间是: "+this.hour+"时"+this.minute+"分"+this.second+"秒");
  }
  public void addSecond(int sec) {
	  this.second+=sec;
	  
  }
  public void addMinute(int min) {
	  this.minute+=min;
	  
  }
  public void  addHour(int hou) {
	  this.hour+=hou;
  }
  public void subSecond(int sec) {
	  this.second-=sec;
	  
  }
  public void subMinute(int min) {
	  this.minute-=min;
	  
  }
  public void  subHour(int hou) {
	  this.hour-=hou;
  }
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
     MyTime T1= new MyTime(22,19,34);
     T1.display();
     T1.addSecond(23);
     T1.display();
     T1.addMinute(23);
     T1.display();
     T1.addHour(2);
     T1.display();
     T1.subSecond(46);
     T1.display();
     T1.subMinute(36);
     T1.display();
     T1.subHour(3);
     T1.display();


	}
}

5、 类的综合练习

1、写一个名为Account的类模拟账户。该类的属性和方法如下图所示。该类包括的属性:账号id,余额balance,年利率annualInterestRate;包含的方法:访问器方法(getter和setter方法),取款方法withdraw(),存款方法deposit()。
Account
int id
double balance
double annualInterestRate

public Account (int id, double balance, double annualInterestRate )

public int getId()
public double getBalance()
public double getAnnualInterestRate()
public void setId( int id)
public void setBalance(double balance)
public void setAnnualInterestRate(double annualInterestRate)
public void withdraw (double amount)
public void deposit (double amount)

提示:在提款方法withdraw中,需要判断用户余额是否能够满足提款数额的要求,如果不能,应给出提示。

2. 创建Customer类。
Customer
String firstName
String lastName
Account account

public Customer(String f,String l)

public String getFirstName()
public String getLastName()
public Account getAccount()
public void setAccount(Account account)

a. 声明三个对象属性:firstName、lastName和account。
b. 声明一个公有构造器,这个构造器带有两个代表对象属性的参数(f和l)
c. 声明两个公有存取器来访问该对象属性,方法getFirstName和getLastName返回相应的属性。
d. 声明setAccount 方法来对account属性赋值。
e. 声明getAccount 方法以获取account属性。

3.写一个测试程序。
(1)创建一个Customer ,名字叫 Jane Smith, 他有一个账号为1000,余额为2000元,年利率为 1.23% 的账户。
(2)对Jane Smith操作。
存入 100 元,再取出960元。再取出2000元。
打印出Jane Smith 的基本信息

成功存入 :100.0
成功取出:960.0
余额不足,取款失败
Customer [Smith, Jane] has a account: id is 1000, annualInterestRate is 1.23%, balance is 1140.0

代码: 

Account.class

package com.gzff;


public class Account {
	//账号id,余额balance,年利率annualInterestRate
	private int id;
	private double balance;
	private double annualInterestRate;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public double getBalance() {
		return balance;
	}


	public void setBalance(double balance) {
		this.balance = balance;
	}

	public double getAnnualInterestRate() {
		return annualInterestRate;
	}

	public void setAnnualInterestRate(double annualInterestRate) {
		this.annualInterestRate = annualInterestRate;
	}

    public Account (int id, double balance, double annualInterestRate ) {
		this.id=id;
		this.balance=balance;
		this.annualInterestRate=annualInterestRate;
	}

    public void withdraw(double amount){
        this.balance+=amount;
        System.out.println("存入: "+amount+"\t"+"余额:"+balance);
    }
    public void deposit(double amount){
        if (this.balance<amount){
            System.out.println("余额不足!");
            return;
        }
        this.balance-=amount;
        System.out.println("取出: "+amount+"\t"+"余额为:"+balance);
    }

}

Custermer.class 

package com.gzff;

public class Customer {
	private String firstName;
	private String lastName;
	private Account account;
	public Customer() {
		
	}
	public Customer(String f,String l) {
		this.firstName=f;
		this.lastName=l;
	}

	public String getFirstName() {
		return firstName;
	}

	public String getLastName() {
		return lastName;
	}


	public Account getAccount() {
		return account;
		
	}
	public void setAccount(Account account) {
		this.account=account;	
	}
	
}

 Customer2.class

package com.gzff;

public class Customer2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		       Customer customer=new Customer("Jane","smith");
		       Account account=new Account(1000,2000,0.0123);
		        customer.setAccount(account);
		           customer.getAccount().withdraw(100);
		           customer.getAccount().deposit(960);
		           customer.getAccount().deposit(2000);
		        System.out.println(customer.getFirstName()+","
		        + customer.getLastName()+"id 是"
		        +account.getId()+","+" 年利率是 "
		        +account.getAnnualInterestRate()*100+"%"+",余额是"
		        +account.getBalance());
		        }

	}

 这节课主要学习了构造器,游离块,静态块

属性赋值的三种方法是:1.= 2.setter 3.构造器

方法的重载: 在一个类中方法名相同,参数列表不同(个数不同,顺序不同,类型不同)
 类的组成部分:
         1.成员属性   2.成员方法  3.构造器    4.静态块   5.游离块    6.内部类

不吃香菜也能做香菜王!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值