类与对象
面对对象的术语
对象:
对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。每个对象都有一组属性和对这对属性进行操作的行为。客观世界是由对象和对象之间的联系组成的。
类;
类是相同属性和行为的一组对象的集合。即类是对一组相同数据和相同操作的对象的定义,一个类所包含的方法和数据描述一组对象的共同属性和行为。
面对对象的基本特征
- 封装性
是把属性和方法包装起来,并尽可能隐藏内部的细节,从而实现隐藏和模块化
- 继承性
继承体现了一种先进的编程模式。子类可以继承父类的属性和行为。
实现了代码的复用
- 多态性
多态是面对对象编程的有一个重要的特征。有两种意义的多态,一种是方法的重载,即多个操作具有相同的方法名,通过参数的类型不同或个数不同确定到底执行哪种方法;
另一种是和继承有关的多态,即同一方法被不同对象调用时可以产生不同的行为
解决了同名方法的问题
类的封装
类的声明:
[类修饰符] class 类名 [extends 基类] [imolements 接口列表]{
[成员变量声明]
[构造方法定义]
[成员方法定义]
}
类修饰符[可选]:用于规定类的一些特殊性,如访问控制,抽象类等
类名:类的名字,一般首字母大写,其余的小写。如果类名由多个单词组成,则每个单词的首字母大写
extends 基类:表示新类由父类派生,Java中只支持单继承
implements 接口列表:表示实现接口。
类体:用花括号括起,类体中可有成员变量声明、构造方法定义和成员方法定义
类的成员变量:
用于定义类的属性,该成员变量可被类内的所有方法访问,其作用范围是整个类
格式:
[] 数据类型 变量名 [= 初始值];
如下:
public class Circle{
private double radius;//定义了描述半径的成员变量
//成员方法
}
其中private
为私有作用域,表示该成员变量只能在类中被访问。
如果在定义变量的时候没有给出初始值,系统会自动赋值。
类的成员方法:
类的成员方法描述了对象所具有的功能和操作,是对象的行为。
[方法修饰符] 返回类型 方法名 ([参数列表]) [throws 异常列表]{
[方法体]
}
- 方法修饰符[可选]:有
public
、private
、static
、final
等 - 返回类型:返回的类型,可以是基本数据类型,也可以是引用数据类型如果没有返回值,则用void作为返回值类型。
- 方法的名字
- 参数列表[可选]:方法的参数列表。如果没有参数括号也不能省略
- 方法体:用一对花括号括起来的方法体。
例如求圆面积的方法:
public class Circle{
private double radius;
//求圆面积的方法
double getArea(){
return Math.PI*radius*radius;
}
}
上述getArea()方法,方法名称为getArea(),没有定义参数,在方法体中,直接使用成员变量radius
求圆的面积,最终返回通过计算获得的面积值,成员变量的作用域是整个类。
getters()和setters():
- getters()方法:用于读取成员变量的值,方法名是get加上首字母大写的变量名,没有参数,返回值类型与成员变量的数据类型相同。
- setters()方法:用于设置成员变量的值,方法名是set加上首字母大写的变量名,无返回值,有一个与成员变量的数据类型相同的参数。
public void setRadius(double radius){
this.radius = radius;
}
在这个方法中,setRadius方法的参数名与成员变量名相同,为了区分这两个变量,用this关键字访问类中成员变量,this代表引用自身对象。
设置getters()方法,该成员变量只能读取,不能修改,相当与设置了只读属性;在setters()方法中,可以在设置变量值前进行数据合法性校验。
构造方法
普通变量在定义的同时,可以对其赋值,用类创建对象的同时,对对象赋初始值是通过构造方法进行的。
- 无参数构造函数
- 有参数构造函数
public class Circle{
private double radius;//定义成员变量radius
public Circle(){ //定义无参数的构造方法
radius = 0;
}
public Circle(double radius){ //定义有参数的构造方法
this,radius = radius;
}
public double getRadius(){ //定义getters方法
return radius;
}
public void setRadius(double radius){ //定义setters方法
this.radius= radius;
}
double getPermeter(){ //定义周长方法
return 2*Math.PI*radius;
}
double getArea(){ //定义面积方法
return Math.PI*radius*radius;
}
void disp(){
System.out.println("圆的周长为:"+getPerimeter());
System.out.println{"圆的面积为:"+getArea();
}
}
类的实例
声明一个类就是定义了一个新的引用数据类型,可以用这个数据类型来声明这种类型的变量(即对象、实例)。
(1)声明对象
创建对象包括声明对象和实例化对象两个部分,声明对象的格式为:
[变量修饰符] 类名 对象名;
类名:将声明过的类作为一种引用数据类型。
对象名:对象(实例)的名字,他作为一个变量来使用,命名遵从变量命名的原则。
Circle c
定义了Circle类的实例(也称为对象或变量):c
(2)创建对象
声明过的对象不能被引用,它默认值是null(空),必须使用new关键字创建这个对象。
对象名 = new 类名([参数列表]);
对象名:即实例名或变量名;
类名:类名必须与声明对象时的类名相一致。
参数列表[可选]:调用相应的构造方法,用参数初始化对象。
c=new Circle();
//或者
c= new Circle(10);
结合声明和创建:
Circle c = new Circle();
//或者
Circle c = new Circle(10);
(3)对象的使用
- 引用对象的属性:
对象名.成员变量名
- 调用对象的方法:
对象名.方法名([参数列表])
- 对象的销毁:系统自动
老师上课的题目:
//1.定义一个Mankind类
//2.封装 id, sex, name属性
//3.封装 Speak方法
//4.id, sex, name的getters和setters方法
//5.无参的构造函数和有参的构造函数
//6.定义一个Test类进行测试
public class Mankind {
private String id;
private int sex;
private String name;
public Mankind(String id,int sex,String name) {
this.id= id;
this.name=name;
this.sex=sex;
}
public Mankind (){
}
public void Speak(){
System.out.println("说话");
}
public void setId(String id){
this.id=id;
}
public void setSex(int sex){
this.sex=sex;
}
public void setName(String name){
this.name=name;
}
public String getId(){
return id;
}
public int getSex(){
return sex;
}
public String getName(){
return name;
}
public static void main(String[] args){
Mankind man1 = new Mankind();
man1.id = "123";
}
}
------------------------------------------------------------------------
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Mankind man1 = new Mankind();
Mankind man2 = new Mankind("11",1,"jack");
System.out.println(man2.getId());
System.out.println(man2.getName());
man2.Speak();
}
成员访问权限
访问控制修饰符:public
、private
、protected
、default
java类成员的访问控制
访问控制符 | 同一个类中 | 同一个包中 | 不同包的子类 | 不同包的非子类 |
---|---|---|---|---|
private | 可以访问 | × | × | × |
default | 可以访问 | 可以访问 | × | × |
protected | 可以访问 | 可以访问 | 可以访问 | × |
public | 可以访问 | 可以访问 | 可以访问 | 可以访问 |