第六天:面向对象入门
- 基本概念
-对象:a.一切皆为对象
b.对象都是属于某个类的
c.对象都有属性和行为
d.对象都是唯一的
-类:类是将一类对象共同特征抽取出来的结果,是对象的蓝图和模板
2.四大支柱
-抽象(abstaction):寻找共性。定义类的过程就是一个抽象的过程,需要做数据抽象和行为抽象
-封装(encapsulation):隐藏一切可以隐藏的复杂繁琐的实现细节,只提供清晰简单的接口(界面)
-继承(inheritance):从已有的类创建新类的过程。提供继承信息的类叫父类(超类,基类),得到继承信息的类叫子类(派生类,衍生类)。
-多态(polymorphism):执行相同的行为做了不同的事情(产生了不同的结果)。
3. 定义类
public class{
//属性
//构造器
//方法(行为抽象)
}
4. 创建和使用对象
类型 变量名=new 构造器(参数列表);
变量名.方法(参数列表);
5.发现问题域中的类。
从问题描述中找名词和动词,名词会成为类或者对象的属性,动词会成为类或者对象的方法。
- 实例1:时钟
package com.lovoinfo;
import java.util.Calendar;
/**
* 时钟类
* @author Administrator
*
*/
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);
}
/**
* 时钟走字
*/
public void go() {
second++;
if(second==60){
second=0;
minute++;
if(minute==60){
minute=0;
hour++;
if(hour==24){
hour=0;
}
}
}
}
/**
* 时钟显示时间
*/
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
*/
public void setHour(boolean up) {
if (up) {
//hour=(hour+1)%24
hour += 1;
if (hour == 24) {
hour = 0;
}
} else {
hour -= 1;
if (hour == -1) {
hour = 23;
}
}
}
/**
* 设置钟表分钟
* @param up
*/
public void setMinute(boolean up){
if(up){
minute =(minute+1)%60;
}else{
minute -=1;
if(minute==-1){
minute=59;
}
}
}
/**
* 设置钟表秒数
* @param up
*/
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 ClockTest {
public static void main(String[] args) throws InterruptedException {
Clock c = new Clock();
JOptionPane.showMessageDialog(null, c.display());
// while(true){
// Thread.sleep(1000);
// System.out.println(c.display());
//
// c.go();
// }
}
}
- 实例2:游泳池
package com.lovoinfo;
public class Circle {
private double radius;//定义圆的半径
/**
* 构造器
* @param radius
*/
public Circle(double radius) {
this.radius = radius;
}
/**
*计算圆的周长
* @return
*/
public double circumference(){
return Math.PI*2*radius;
}
/**
* 计算圆的面积
* @return
*/
public double area(){
return Math.PI*radius*radius;
}
}
package com.lovoinfo;
import java.util.Scanner;
public class CircleTest {
private static final double FUNIT = 5;
private static final double CUNIT = 18;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入圆的半径:");
double r=sc.nextDouble();
Circle c1=new Circle(r); //创建半径为r的圆
Circle c2=new Circle(r+3);//创建半径为r+3的圆
System.out.printf("围墙的造价:¥%.2f",c2.circumference()*FUNIT);
System.out.printf("过道的造价¥%.2f:",(c2.area()-c1.area())*CUNIT);
sc.close();
}
}