第六天:面向对象入门
基本概念
- 一切具有相同属性的物体都可以作为一个类,每个属性的作用或者用法就是这个类的传递方式。
定义类
- 如:手机类
package com.lovoinfo;
/**
* 手机
* @author jackfrued
*
*/
public class MobilePhone {
String brand; // 品牌
double screenSize; // 屏幕尺寸
boolean smart; // 是不是智能机
/**
* 打电话
* @param telNumber 呼叫的号码
*/
public void call(String telNumber) {
System.out.println("正在呼叫" + telNumber);
}
/**
* 发短信
* @param telNumber 收信人
* @param message 消息的内容
*/
public void sendMsg(String telNumber, String message) {
System.out.println("向" + telNumber + "发送...");
System.out.println(message);
}
}
- 学生类
package com.lovoinfo;
/**
* 学生
* @author jackfrued
*
*/
public class Student {
private String name; // 姓名
private int age; // 年龄
/**
* 构造器
* @param name 姓名
* @param age 年龄
*/
public Student(String name, int age) {
this.name = name;
this.age = age;
}
/**
* 吃饭
* @param food 吃的东西
*/
public void eat(String food) {
System.out.println(name + "正在吃" + food);
}
/**
* 睡觉
*/
public void sleep() {
System.out.println(name + "正在睡觉.");
}
/**
* 学习
* @param courseName 课程的名称
*/
public void study(String courseName) {
System.out.println(name + "正在学习" + courseName);
}
@Override
public String toString() {
return name + " - " + age;
}
}
3 .创建和使用对象
- 使用手机类
package com.lovoinfo;
public class Test01 {
public static void main(String[] args) {
MobilePhone phone = new MobilePhone();
phone.call("13812345678");
phone.sendMsg("13900998877", "晚上一起吃饭吧?");
}
}
- 使用学生类
package com.lovoinfo;
public class Test02 {
public static void main(String[] args) {
Student stu = new Student("王大锤", 20);
stu.eat("牛肉面");
stu.sleep();
stu.study("Java程序设计");
System.out.println(stu);
}
}
实例1:时钟
package com.lovoinfo;
import java.util.Calendar;
/**
* 时钟
* @author jackfrued
*
*/
public class Clock {
private int hour; // 时
private int minute; // 分
private int second; // 秒
/**
* 构造器
*/
public Clock() {
Calendar cal = Calendar.getInstance();
hour = cal.get(Calendar.HOUR_OF_DAY);
minute = cal.get(Calendar.MINUTE);
second = cal.get(Calendar.SECOND);
}
/**
* 构造器
* @param hour 时
* @param minute 分
* @param second 秒
*/
public Clock(int hour, int minute, int second) {
this.hour = hour;
this.minute = minute;
this.second = second;
}
/**
* 走字
*/
public void go() {
second += 1;
if(second == 60) {
second = 0;
minute += 1;
if(minute == 60) {
minute = 0;
hour += 1;
if(hour == 24) {
hour = 0;
}
}
}
}
/**
* 显示时间
* @return 返回当前时间
*/
public String display() {
String str = "";
if(hour < 10) {
str += "0";
}
str += hour + ":";
if(minute < 10) {
str += "0";
}
str += minute + ":";
if(second < 10) {
str += "0";
}
str += second;
return str;
}
/**
* 调整小时
* @param up true表示上调, false表示下调
*/
public void setHour(boolean up) {
if(up) {
hour = (hour + 1) % 24;
}
else {
hour -= 1;
if(hour == -1) {
hour = 23;
}
}
}
/**
* 调整分钟
* @param up true表示上调, false表示下调
*/
public void setMinute(boolean up) {
if(up) {
minute = (minute + 1) % 60;
}
else {
minute -= 1;
if(minute == -1) {
minute = 59;
}
}
}
/**
* 调整秒
* @param up true表示上调, false表示下调
*/
public void setSecond(boolean up) {
if(up) {
second = (second + 1) % 60;
}
else {
second -= 1;
if(second == -1) {
second = 59;
}
}
}
}
- 使用时钟类
package com.lovoinfo;
import javax.swing.JOptionPane;
public class Test03 {
public static void main(String[] args) throws InterruptedException {
Clock c = new Clock(); // 用构造器创建时钟对象
JOptionPane.showMessageDialog(null, c.display());
System.exit(0); // 关闭JVM
}
}
或者
package com.lovoinfo;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;
import javax.swing.UIManager;
public class ClockFrame extends JFrame {
private static final long serialVersionUID = -329506225578854635L;
private JLabel timeLabel = new JLabel("", JLabel.CENTER);
private Clock c = new Clock();
public ClockFrame() {
this.setTitle("时钟");
this.setSize(300, 200);
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
timeLabel.setText(c.display());
c.go();
timeLabel.setFont(new Font("Consolas", Font.PLAIN, 64));
this.add(timeLabel);
Timer timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
timeLabel.setText(c.display());
c.go();
}
});
timer.start();
}
public static void main(String[] args) throws Throwable {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
new ClockFrame().setVisible(true);
}
}
作业1:游泳池
package com.lovoinfo;
/**
* 游泳池
* @author Legendary
*
*/
public class Natatorium {
private static double r;//圆形游泳池半径
/**
* 计算出小圆面积
* @param r为半径
* @return 返回面积值
*/
public Natatorium(double r){
this.r = r;
}
public double smCircul(){//小圆面积
double area1 = r*r*Math.PI;
return area1;
}
/**
* 计算出大圆面积
* @param r为半径
* @return 返回面积值
*/
public double bmCircul(){//大圆面积
double area2 = (r+3)*(r+3)*Math.PI;
return area2;
}
/**
* 计算出小圆周长
* @param r为半径
* @return 返回周长
*/
public double smQirth(){
double q1 = 2*r*Math.PI;
return q1;
}
/**
* 计算出大圆周长
* @param r+3为半径
* @return 返回周长
*/
public double bmQirth(){
double q2 = 2*(r+3)*Math.PI;
return q2;
}
/**
* 计算出环面积
* @param bm以r+3为半径,sm以r为半径
* @return 返回环形面积
*/
public double ringCircul() {
double rc = bmCircul() - smCircul();
return rc;
}
}
调用类
package com.lovoinfo;
import java.util.Scanner;
public class Test4 {
public static void main(String[] args) {
System.out.print("游泳池的半径是(单位为m):");
Scanner sc = new Scanner(System.in);
double r = sc.nextDouble();
Natatorium m = new Natatorium(r);
double cost = 18*m.ringCircul();
cost += 5*m.bmQirth();
System.out.printf("地板和围墙总共需要花费:%.2f元",cost);
sc.close();
}
}