一.面向对象程序设计概述
1.知识点面向对象程序设计的目的
(1)从程序设计的角度来看,事物的属性就可以用变量来表示,行为则可以用方法来反映。
(2)客观世界中事物的属性和行为可以进行传递,当某一个事物得到另一个事物传给它的属性和行为,我们就说该事物实现了继承。
(3)继承不同于复制,实现了继承的事物可以添加上自己的属性和行为,从而实现对已有事物的功能扩充。
(4)面向对象的程序设计方法将客观事物进行抽象,并且通过继承等技术实现软件的可扩充性和可重用性。
2.知识点类和对象
类是一种特殊属性类型
对象是类的实例。
类是对象的抽象
学生(类)和每个学生(对象)
3.知识点java面向对象设计的核心设计
(1)面向对象程序设计的核心技术是封装,继承和多态性。
(2)类是封装的基本单元。通过封装可以隐藏类的实现细节,也可以避免对类中属性的直接操作。可以通过类的公共接口访问类中的变量,而不必知道这个接口(公共方法)是如何实现的。只要这个方法的名字和参数不变,即使类中的变量被重新定义或方法的代码被修改,对类中变量的访问也不会受到影响。
(3)例如,你要在计算机上安装一块声卡,你不必知道声卡的内部结构,也不必知道声卡的功能是如何实现的,因为实现声卡功能的集成电路都被封装了。你只要知道声卡应该安装在你的计算机主板的什么位置,其他设备如音箱、光驱怎样与声卡连接就可以了。
(4)继承是对类的功能的重用和扩充。通过对某一个类的继承产生一个新类(子类),子类既有从某个类(超类)中继承下来的功能,又可以定义自己的变量和方法,产生新的功能。
(5)多态性是指方法的名字相同,但实现不同。即“一个接口,多个方法”。如有三个方法,分别用来计算圆、矩形和三角形的面积,它们都可以叫 area。
4.知识点java面向对象技术
Java是一种完全面向对象的程序设计语言,它所有的属性类型和方法都封装在类中。Java继承了C++的优点,但放弃了那些含糊、复杂和容易出错的特性。Java 所实现的面向对象的特性,降低了程序的复杂性,实现了代码的可重用性,提高了运行效率。
二.类的创建
1.代码(日期类,输出今天,明天日期,判断是否是闰年)
package 第四章;
public class 日期判断422 {//函数的公共类
int year,month,day;//定义整个函数体会用到的变量,类变量
//因为他们变量作用的方位是整个类,所以类变量的声明位置应该在所有方法(包括main()方法)的外面,是类变量
public void setdate(int y,int m,int d) {//用来设置输入日期,成员方法
//格式: <方法修饰符(访问控制符protected,public和类型修饰符static,final,abstract,native)> 类型 方法名(参数)
year=y;
month=m;
day=d;
}
boolean isleap(int y) {//用来判断是否是闰年
return(y%4==0&&y%100!=0||y%400==0);//返回值
}
public void today() {//用来输出今天的日期
System.out.println("The day of today is "+year+"/"+month+"/"+day);
}
public void tomorrow() {//用来输出明天的日期
int y,m,d;
d=day+1;m=month;y=year;
//判断是二月以及是否是闰年
if((d>28)&&month==2) {
if(!isleap(year)||d>29)
d=1; m=m+1;
}
//判断是否是其他月份的30号
else if(d>30&&(month<7&&month%2==0||month>7&&month%2==1)) {
d=1;m=m+1;
}
//判断是否是31号,以及是否是12月份的31号
else if(d>31) {
d=1;m=m+1;
if(m==13) {
m=1;y=y+1;
}
}
//执行总部分
System.out.println("The date of tomorrow is "+y+"/"+m+"/"+d);
}
public static void main(String args[]) {
日期判断422 de=new 日期判断422();
de.setdate(2000,2,29);//设置日期
de.isleap(de.year);
System.out.println(de.year+" is a leap year");
de.today();
de.tomorrow();
}
}
、
2.知识点
【1】类的声明格式
【2】成员变量
【3】成员方法
三.对象的创建和使用
1.代码(日期类,输出今天,明天日期,判断是否是闰年增加了自己创建的构造方法的类)
package 第四章;
public class Date2 {
int year,month,day;//定义整个函数体会用到的变量,类变量
//因为他们变量作用的方位是整个类,所以类变量的声明位置应该在所有方法(包括main()方法)的外面,是类变量
Date2(int y,int m,int d){//创建构造方法
year=y;
month=m;
day=d;
//定义与赋值
}
Date2(){//默认构造方法
}
public void setdate(int y,int m,int d) {//用来设置输入日期,成员方法
//格式: <方法修饰符(访问控制符protected,public和类型修饰符static,final,abstract,native)> 类型 方法名(参数)
year=y;
month=m;
day=d;
//定义与赋值
}
boolean isleap(int y) {//用来判断是否是闰年
return(y%4==0&&y%100!=0||y%400==0);//有返回值
}
public void today() {//用来输出今天的日期
System.out.println("The day of today is "+year+"/"+month+"/"+day);
}
public void tomorrow() {//用来输出明天的日期
int y,m,d;
d=day+1;m=month;y=year;
//判断是二月以及是否是闰年
if((d>28)&&month==2) {
if(!isleap(year)||d>29)
d=1; m=m+1;
}
//判断是否是其他月份的30号
else if(d>30&&(month<7&&month%2==0||month>7&&month%2==1)) {
d=1;m=m+1;
}
//判断是否是31号,以及是否是12月份的31号
else if(d>31) {
d=1;m=m+1;
if(m==13) {
m=1;y=y+1;
}
}
//执行总部分
System.out.println("The date of tomorrow is "+y+"/"+m+"/"+d);
}
public static void main(String args[]) {
Date2 de1,de2;//创建对象,声明对象
de1=new Date2(1999,3,31);//实例化对象
de2=new Date2();
System.out.println("The first object:");//输出,de1的应用
if(de1.isleap(de1.year))//调用isleap方法判断是否是闰年
System.out.println(de1.year+"is a leap year");//判断是闰年后输出,调用变量,成员变量的引用
de1.today();//成员方法的引用
de1.tomorrow();
System.out.println("The second object:");//输出此行,de2的应用,无参数需要赋值
de2.setdate(2000,2,29);//利用此方法设置日期
if(de2.isleap(de2.year))
System.out.println(de2.year+" is a leap year");
de2.today();
de2.tomorrow();
}
}
对比 如果此时删除Date2()方法,相当于少了一个方法
对比(报错)(没有Date(int y,int m,int d)后报错)
2.知识点
【1】创建对象
【2】构造方法和对象的初始化
类对象不能直接调用方法,除非方法声明为static
构造函数是类中的特殊方法
构造方法无返回值,只用new运算符调用,用户不能直接调用