Java面向对象基本概念及基本概念
面向对象的思想总结
系统以对象为中心来组织
对象相互间发送消息
相关的属性和行为被统一到对象上
关注的焦点是对象及对象的职责
使得系统构建更容易,易维护,易扩展,易复用
解决问题的方式更接近人的思维方式,使人更容易理解
面向对象基本概念
- 抽象(abstract)
- 从事物中舍弃个别的非本质特征,抽取共同的本质特征
- 只考虑与问题域相关的信息,而忽略与问题域不相关的部分
- 对象(object)
- 是系统中用来描述客观事物的一个实体。可以是有形的,也可以是无形的(如一个客户,一张银行卡,窗体中的一个按钮等等)
- 对象是构成世界的一个独立单位
- 具有自己的静态结构(属性)和动态行为(方法)
- 每个对象有自己的唯一标识
- 类(class)
- 类是一组具有相同属性和行为的对象的抽象,类的作用是用来创建对象,对象是类的一个实例
类和对象的关系
抽象和具体的关系。
每一个类在某一时刻都有零个或更多的实例, 类是生成对象的模板
一个类定义了使用哪些数据来描述属性,每一个对象都有相应的属性值数据,一个类通过一系列方法来定义
行为,这些方法能在每个对象中被激活
面向对象主要特征
-
封装(encapsulation)
- 所谓封装是把对象的属性和行为结合在一个独立的系统单位内部
- 尽可能隐蔽对象的内部细节,只向外部提供接口
- 降低对象间的耦合度
-
继承(inheritance)
- 也称泛化,继承性是子类自动共享父类属性和方法的机制,在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入自己若干新的内容
- 继承简化了人们对事物的认识和描述,有益于软件复用,是提高软件开发效率的重要原因之一
- 是类之间的一种关系,一般类与特殊类之间的关系
- 继承关系的语义:“is a kind of”
-
多态(polymorphism)
- 指同一个命名可具有不同的语义
- 在方法中,常指在一般类中定义的属性或方法被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为,对于子类,可用不同的方法替代实现父类的服务的方法
面向对象的内容还有很多,时间有限就不写太多了,下面献上我今天做好的几道跟面向对象有关的题目
题目一
1、定义一个矩形类Rectangle:(知识点:对象的创建和使用)
1.1 定义三个方法:getArea()求面积、getPer()求周长,showAll()分别在控制台输出长、宽、面积、周长。
1.2 有2个属性:长length、宽width
1.3 通过构造方法Rectangle(int width, int length),分别给两个属性赋值
1.4 创建一个Rectangle对象,并输出相关信息
矩形类 Rectangle_T2.java
package homeword;
public class Rectangle_T2 {
private int length;
private int width;
public Rectangle_T2(int length,int width) {
this.width = width;
this.length = length;
}
/**
* 求面积
* @return
*/
public int getArea() {
return length*width;
}
/**
* 求周长
* @return
*/
public int getPer() {
return (length+width)*2;
}
/**
* 在控制台输出长、宽、面积、周长
*/
public void showAll() {
System.out.println("长 : "+length+" 宽: "+width+" 面积: "+this.getArea()+" 周长: "+this.getPer());
}
}
测试类 TestRectangle_T2.java
package homeword;
public class TestRectangle_T2 {
public static void main(String[] args) {
Rectangle_T2 rectangle1 = new Rectangle_T2(25, 10);
Rectangle_T2 rectangle2 = new Rectangle_T2(20, 15);
rectangle1.showAll();//输出rectangle1所有信息
System.out.println(rectangle1.getArea()); //输出rectangle1面积
rectangle2.showAll();//输出rectangle2所有信息
}
}
题目二
2、设计一个类Student,该类包括姓名、学号和成绩。设计一个方法,按照成绩从高到低的顺序输出姓名、学号和成绩信息。
下面为了大家调试方便,我干脆在类里进行测试,就不新建一个测试类了。如果有需要可以自己新建一个,把main方法里的代码copy过去就可以进行测试了。
学生类 Student_T4.java
package homeword;
import java.lang.reflect.Array;
import java.util.Arrays;
public class Student_T4 {
//4、设计一个类Student,该类包括姓名、学号和成绩。设计一个方法,按照成绩从高到低的顺序输出姓名、学号和成绩信息。[选做题]
private String name;//姓名
private int no; //学号
private int score;//成绩
static int count=0;
static private int [] crArr = new int[999]; //存放成绩数组
static private int [] noArr = new int[999]; //存放学号数组
static private String [] nameArr = new String[999]; //存放姓名数组
/**
* 构造方法
* name 姓名 ,no 学号 ,score 成绩
* @param name
* @param no
* @param score
*/
public Student_T4(String name, int no, int score) {
this.name = name;
this.no = no;
this.score = score;
nameArr[count]=this.name;
noArr[count]=this.no;
crArr[count] = this.score;
count++;
}
/**
* 定义一个排序数组的静态方法
*/
public static void sortArr() {
int temp;
String tStr;
for(int i=1;i<count;i++) {
for(int j=1;j<count-i+1;j++) {
if(crArr[j-1]<crArr[j]) {
//对成绩排序
temp = crArr[j-1];
crArr[j-1]=crArr[j];
crArr[j]=temp;
//同步学号
temp = noArr[j-1];
noArr[j-1]=noArr[j];
noArr[j]=temp;
//同步名字
tStr = nameArr[j-1];
nameArr[j-1]=nameArr[j];
nameArr[j]=tStr;
}
}
}
}
/**
* 定义一个打印信息的静态方法
*/
static public void printAllInfo() {
for(int i=0;i<count;i++) {
//根据索引打印对应数组上对应信息存放的位置
System.out.println("姓名 : "+nameArr[i]+" 学号 : "+noArr[i]+" 成绩: "+crArr[i]);
}
}
/**
* 显示方法调用了多少次
*/
public static void showCount() {
System.out.println(count);
}
public static void main(String[] args) {
Student_T4 student_T41 = new Student_T4("Tony", 32, 35);
Student_T4 student_T42 = new Student_T4("zhang", 43, 78);
Student_T4 student_T43 = new Student_T4("bill", 23, 66);
Student_T4 student_T44 = new Student_T4("Join", 24, 76);
Student_T4 student_T45 = new Student_T4("king", 25, 98);
//Student_T4.showCount();
// System.out.println(student_T43.crArr.length);
Student_T4.sortArr();
Student_T4.printAllInfo();
}
}