类和对象
1.类
1.1 概念:类是一种实体类型的抽象,具有一系列相同特征和行为的物体。它也是一种数据类型。类只是仅仅定义了一些成员和方法,它不会去具体的操作这方行为,没有实际的意义。例如:我们盖房子时,开始时要先设计房子的整体架构,也就是图纸,而具体的操作还得需要一个实例去执行。
1.2 组成 :类由三部分组成。
(1)成员变量 :静态变量、实例变量
(2)成员方法 :静态方法、实例方法
(3)构造函数
1.3 类的三大特性:封装、继承、多态。
(1)封装性:就是将一些东西打包成一个整体。对用户隐藏其实现细节,使用该类的用户可以通过该类提供的接口来访问该类,使用户不能轻易的操作此数据结构,只能执行类允许公开的数据的一个小系统。保证了一定的安全性。
(2)继承性
1)定义: 它是子类继承父类的特征和行为,并且使子类的对象具有父类的实例和方法。
2)继承方式:通过extends关键字来是实现子类对父类的继承。被继承的类称为父类或超类或基类,而继承得到的类称为子类或派生类。子类继承父类的状态(属性)和行为(方法),同时也可以有自己的特征。
3)向上造型:基类的引用引用派生类对象,或者基接口的引用引用实现该接口的类对象。
4)好处:代码复用,减少代码的冗余度。
5)继承特性:java中只有单个继承,没有多继承。
例如:Worker类继承People类,那么它就拥有了People类里面的属性和方法的使用权限。
public class People {
String name;// 1.实例变量/成员变量
double age;
People()
{
name = null;
age = 0.0;
}
People(String name,int age)
{
this.name = name;
this.age = age;
}
void eat()
{
System.out.println(this.name+"吃饭");
playBall();
}
void playBall()
{
System.out.println(this.age+"打球");
}
}
public class Worker extends People{
public Worker()
{
super();
}
public static void main(String[] args) {
Worker worker = new Worker();
worker.playBall();
worker.eat();
}
}
(3)多态
1)定义:对一个消息做出了不同的反应,也就是可以采用不同的完成动作。
2) 实现多态的条件:1.继承 2.方法重写 3.向上造型
3)分类:
(1)编译期多态(静态绑定):方法重载,也就是函数名以及返回类型相同,但是参数不一样。例如系统提供的Arrays类的copyOf()方法。
(2)运行期多态(动态绑定):方法重写。
4)方法重写
实现原理:子类的地址覆盖掉父类的的地址。
例如:重写equals方法和compareTo()方法。
@Override
public boolean equals(Object obj) {
If(this == obj)
{
Return true;
}
if(obj instanceof Student ) //匹配当前对象的关键字
{
Student student = (Student)obj;
if(this.score == student.score)
{//this是当前对象 obj是另外一个对象
return true;
}
}
return false;
}
@Override
public int compareTo(Student o) {
if(this.score == o.score)
{return 0;
}else if(this.score > o.score)
{ return 1; }
else
{ return -1;}}
例如:工人类继承了People类,也就是它通用了People类里面的方法和属性的使用权。
1.4 代码层面:一个类编译生成一个 .class 字节码文件。主要可用菱形继承解释。
例如:这是一个汽车类,里面定义了汽车的名字、颜色和数量属性,还有启动和停车行为。
public class Car {
private String car_name;
private String car_color;
private String car_number;
public Car(String car_name)
{
this.car_name = car_name;
}
public Car(String car_name, String car_color, String car_number) {
this.car_name = car_name;
this.car_color = car_color;
this.car_number = car_number;
}
public void start()
{
System.out.println(car_name+"汽车开始启动");
}
public void stop()
{
System.out.println(car_name+"汽车已经停止");
}
}
2.对象
2.1 概念 :它是类的实例化对象。它可以具体的操作类的一些属性和方法。
2.2 对象的大小 : 对象头(标记Class对象存放的地址)+实例变量+内存填充
2.3 一个类可以new多个对象,每一个对象都可以公平的去使用类的方法和属性。
例如:People类可以生成多个实例对象,每一个对象都可以调用类里面的方法。
class People1{
private static int count;
public People1()
{
count++;
}
public void fun()
{
}
public static int getCount()
{
return count;
}
}
public class ClassTestDemo {
public static void main(String[] args) {
People1 p1 = new People1();
People1 p2 = new People1();
People1 p3 = new People1();
People1 p4 = new People1();
System.out.println(People1.getCount());
}
}