面向对象,构造器(构造方法)用于在创建对象时初始化属性,this用来指当前类。
构造器(构造方法,Constructor)的使用
Construct:建造、建设、构造。 CCB
1.作用:创建类的对象;属性的初始化
2.说明
① 当我们在类中没有显示的定义构造器时,系统会默认提供一个空参的构造器
② 构造器的定义格式:权限修饰符 类名(形参列表){}
③ 一个类的多个构造器之间构成重载
④ 当我们在类中显示的声明了类的构造器时,系统就不再提供默认的空参构造器
⑤ 一个类中,一定会有构造器的声明。第1题
- 定义一个圆形Circle类。
- 属性:私有化
- r:半径
- 构造方法:
- 无参构造方法
- 满参构造方法
- 成员方法:
- get/set方法
- showArea方法:打印圆形面积
- showPerimeter方法:打印圆形
代码实现:
public class Test01 {
public static void main(String[] args) {
Circle c1 = new Circle(1.2);
c1.showArea();
c1.showPerimeter();
}
}
class Circle {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public Circle() {
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
public void showArea(){
System.out.println("半径为:" + radius + ",面积:" + 3.14 * radius * radius);
}
public void showPerimeter(){
System.out.println("半径为:" + radius + ",周长:" + 2 * 3.14 * radius);
}
}
第2题
- 定义一个日期MyDate类。
- 属性:
- year:年
- month:月
- day:日
- 构造方法:
- 满参构造方法
- 成员方法:
- get/set方法
- void showDate方法:打印日期。
- boolean isLeapYear()方法:判断当前日期是否是闰年
代码实现:
public class Test02 {
public static void main(String[] args) {
MyDate my = new MyDate(2019,5,13);
my.showDate();
boolean flag = my.isLeapYear();
System.out.println(my.getYear()+ (flag?"是闰年":"不是闰年"));
}
}
class MyDate {
private int year;
private int month;
private int day;
public MyDate() {
}
public MyDate(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
public void showDate() {
System.out.println("日期" + year + "年" + month + "月" + day + "日");
}
public boolean isLeapYear() {
return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
}
}
第3题
- 定义一个扑克Card类。
- 属性:
- 花色
- 点数
- 构造方法:
- 满参构造方法
- 成员方法:
- showCard方法:打印牌面信息
- 定义测试类,创建Card对象,调用showCard方法。
代码实现:
public class Test03 {
public static void main(String[] args) {
Card c = new Card("黑桃", "A");
c.showCard();
}
}
class Card {
private String hua;
private String dian;
public Card(String hua, String dian) {
this.hua = hua;
this.dian = dian;
}
public Card() {
}
public String getHua() {
return hua;
}
public void setHua(String hua) {
this.hua = hua;
}
public String getDian() {
return dian;
}
public void setDian(String dian) {
this.dian = dian;
}
public void showCard() {
System.out.println(hua + dian);
}
}
第4题
- 创建一个Book类,属性私有化,提供有参和无参构造,get/set
- 创建TestBook类,并创建Book数组,创建多个Book对象,存储到数组中,并遍历显示他们的信息,并按照销量从高到低排序
代码实现:
public static void main(String[] args) {
Book[] all = new Book[5];
all[0] = new Book(1, "《从入门到精通》", "张三", 88, 100, 1000);
all[1] = new Book(2, "《从入门到放弃》", "李四", 89, 200, 800);
all[2] = new Book(3, "《从入门到脱发》", "王五", 56, 10, 500);
all[3] = new Book(4, "《从入门到吃药》", "赵六", 100, 180, 900);
all[4] = new Book(5, "《从入门到升仙》", "钱七", 99, 0, 1000);
System.out.println("排序前:");
System.out.println("编号\t书名\t\t作者\t价格\t销量\t库存");
for (int i = 0; i < all.length; i++) {
System.out.println(all[i].getInfo());
}
//排序
for (int i = 1; i < all.length; i++) {
for (int j = 0; j < all.length-i; j++) {
if(all[j].getSales() < all[j+1].getSales()){
Book temp = all[j];
all[j] = all[j+1];
all[j+1] = temp;
}
}
}
System.out.println("排序后:");
System.out.println("编号\t书名\t\t作者\t价格\t销量\t库存");
for (int i = 0; i < all.length; i++) {
System.out.println(all[i].getInfo());
}
}
}
class Book {
private Integer id;
private String title;
private String author;
private double price;
private Integer sales;
private Integer stock;
public Book() {
}
public Book(Integer id, String title, String author, double price, Integer sales, Integer stock) {
this.id = id;
this.title = title;
this.author = author;
this.price = price;
this.sales = sales;
this.stock = stock;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Integer getSales() {
return sales;
}
public void setSales(Integer sales) {
this.sales = sales;
}
public Integer getStock() {
return stock;
}
public void setStock(Integer stock) {
this.stock = stock;
}
public String getInfo(){
return id + "\t" + title + "\t" + author + "\t" + price + "\t" + sales + "\t" + stock;
}
}
第5题
声明员工类、程序员类、设计师类、架构师类
- 员工类属性:编号、姓名、年龄、手机号码
- 程序员类属性:编程语言
- 设计师类属性:奖金
- 架构师类属性:持有股票数量
- 要求:属性私有化,无参有参构造,get/set,getInfo方法(考虑重写)
代码实现:
public class Employee {
private int id;
private String name;
private int age;
private String tel;
public Employee() {
super();
}
public Employee(int id, String name, int age, String tel) {
super();
this.id = id;
this.name = name;
this.age = age;
this.tel = tel;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getInfo(){
return "编号:" + name + ",姓名:" + name + ",年龄:" + age + ",电话:" + tel;
}
}public class Programmer extends Employee{
private String language;
public Programmer() {
super();
}
public Programmer(int id, String name, int age, String tel, String language) {
super(id, name, age, tel);
this.language = language;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
@Override
public String getInfo() {
return super.getInfo() + ",编程语言:" + language;
}
}public class Designer extends Programmer {
private double bonus;
public Designer() {
super();
}
public Designer(int id, String name, int age, String tel, String language, double bonus) {
super(id, name, age, tel, language);
this.bonus = bonus;
}
public double getBonus() {
return bonus;
}
public void setBonus(double bonus) {
this.bonus = bonus;
}
@Override
public String getInfo() {
return super.getInfo() + ",奖金:" + bonus;
}
}public class Architect extends Designer {
private int stock;
public Architect() {
super();
}
public Architect(int id, String name, int age, String tel, String language, double bonus, int stock) {
super(id, name, age, tel, language, bonus);
this.stock = stock;
}
public int getStock() {
return stock;
}
public void setStock(int stock) {
this.stock = stock;
}
@Override
public String getInfo() {
return super.getInfo() + ",持有股票数:" + stock;
}
}public class Test05 {
public static void main(String[] args) {
Employee emp = new Employee(1, "张三", 23, "10086");
Programmer pro = new Programmer(2, "李四", 24, "10010", "java");
Designer de = new Designer(3, "王五", 25, "114", "python", 2000);
Architect a = new Architect(4, "赵六", 26, "110", "java", 3000, 100);
System.out.println(emp.getInfo());
System.out.println(pro.getInfo());
System.out.println(de.getInfo());
System.out.println(a.getInfo());
}
}