面向对象编程的三个特性
1.封装性:将数据和对数据的操作封装在一起。
- 继承:子类可以继承父类的数据和数据上的操作,同时又可以增加子类 独有的数据与操作。
3.多态
- 操作名称的多态(重载)
- 和继承有关的多态(重写)
类
class 类名 //类的声明
{
类体的内容
//类体由变量的定义(刻画属性)和方法的定义(刻画功能)
}
变量可分为成员变量和局部变量
成员变量又可以分为实例变量和类变量(Static变量)
关于实例变量和类变量应该注意一点
类变量在内存中只占一份存储空间,由同一个类创建的所有对象共享一个类变量
实例变量在每次有新对象分配内存的时候都为之新开辟一个独立的空间,即不同的对象有实例变量的不同副本
成员变量的隐藏:如果成员变量的名字与成员变量的名字相同,则成员变量被隐藏,若要在方法内使用被隐藏的成员变量,必须要使用关键字this
class 三角形
{
float sideA,sideB,sideC,lengthSum;
void setSide(float sideA,float sideB,float sideC)
{
this.sideA=sideA;
this.sideB=sideB;
this.sideC=sideC;
}
}
方法
方法重载
Java中存在两种多态:重载和重写
方法重载是功能的多态性,即可以向功能(方法)传递不同的消息,以便让对象根据相应的消息来产生对应的行为,一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,要么参数的个数不同,要么参数的类型不同
举个例子
class Area
{
float getArea(float r)
{ return 3.14*r*r;
}
double getArea(float x,int y)
//应注意的是方法的返回类型和参数的名字不参与比较
{ return x*y;
}
}
构造方法
构造方法是一种特殊方法,它的名字必须与它所在的类的名字完全相同,而且没有类型,构造方法也可以重载
例子
class 梯形
{
float 上底,下底,高;
梯形()
{
上底=60;
下底=100;
高=20;
}
梯形(float x,int y,float h)
{
上底=x;
下底=y;
高=h;
}
}
应该注意的问题
对成员变量的操作只能在方法中,方法可以对成员变量和方法体中自己定义的局部变量进行操作
在定义类的成员变量时可以同时赋予初值
class A
{
int a=12; //定义的同时赋予初值
float b=12.56f;
}
class B
{
int a ;
float b;
a=12; //非法,因为对成员变量的操作只能放在方法中
b=23.42f; //非法
}
应该注意的是,类方法只能对类变量进行操作,类方法只能调用类方法
对象
对象是类的一个实例
创建一个对象包括 对象的声明和为对象分配内存两个步骤
对象的声明
类名 对象名;
为声明的对象分配内存
例子
class Dragons
{
double height, weight;
String weapons;
}
class A
{ public static void main(String[] args)
{
Dragons Dovakkin;//声明对象
Dovakkin=new Dragons();
//为对象分配内存,使用new 运算符和默认的构造方法
}
}
//若类中定义了构造方法,Java不提供默认的构造方法,因此在类中定义了一个含参数的构造方法的前提下,使用默认的构造方法是非法的
class point
{
int x,y;
point(int a ,int b)
{
x=a;
y=b;
}
}
public class Test
{
public static void main(String[] args)
{
point p1,p2;
p1=new point(10,10); //合法
p2=new point(); //非法
}
}