类:对现实世界中事物的抽象。如:Student
对象:现实世界中具体的个体。张三、李四 这些具体的学生
Student是一个抽象的身份,而你我他是真实存在的人。
面向对象的特征:抽象、封装、继承、多态
抽象
我们定义一个类的过程就是抽象出某些对象的特征
封装
封装就是把抽象的数据和对数据进行的操作方法封装在一个类中,数据被保存在类的内部,通常我们将类的属性封装为private或protect,要想调用这些方法只有定义该类的成员变量,调用get、set方法才能对其进行读取或修改;
public:所有人都可以访问、修改属性或者调用方法;
protected:只有类自己及其子类和在同一个包内可以访问调用
private:只有类自己可以调用,其他任何地方都不允许使用。
我们通常将类的属性定义为该 类型,使外部只能通过类提供的get、set方法来获取或修改属性值。这样可以在 get、set方法中定义一些规则,增加了程序的安全性。
default:默认类型,上述三种类型都不写时系统默认是default类型,只能类自己和同一个包 内的程序使用
继承
子类和父类之间存在严格的继承关系,子类一定属于父类,包含父类的一切属性
例如:定义父类为 Person ,子类为 朱翰鹏,朱翰鹏一定是一个人,拥有一个人的一切属性;
注意:子类只能继承一个父类
所有没有写明继承了哪一个类的子类,系统默认继承Object类,Object是所有类的父类
public class Person{
private boolean alive = true; //默认他活着
public void getAlive() {
if (this.alive)
System.out.println("活着");
else
System.out.println("死了");
}
public void setAlive(boolean b){
this.alive = b;
}
}
public class ZhuHanpeng extends Person{
public static void main(String[] args) {
Person zhp = new ZhuHanpeng(); //类的初始化
zhp.getAlive();//活着
zhp.setAlive(false);
zhp.getAlive();//死了
}
}
多态
多态是面向接口编程
多态是指通过指向父类的指针,来调用在不同子类中实现的方法。
public class Person{
public void sleep(){
System.out.println("他不睡觉");
}
}
public class ZhuHanpeng extends Person{
@Override
public void sleep(){
System.out.println("他在教室睡");
}
}
public class ZhuHanPeng2 extends Person{
@Override
public void sleep(){
System.out.println("他在宿舍睡");
}
}
public class SleepAt {
public static void main(String[] args) {
Person person = new ZhuHanpeng();
person.sleep();//他在教室睡
Person person2 = new ZhuHanPeng2();
person2.sleep();//他在宿舍睡
}
}
接口:
Java中不支持多继承,于是接口实现了多继承的功能,一个类可以 implements 多个接口
接口interface:
接口是一个纯粹的抽象类(接口里面所有的方法都是抽象方法)
接口就是一个规范,他没有提供任何是实现,具体的功能由实现接口的子类去实现。
接口就是一个规范,可插拔(可以被替换,首先定义一个标准(接口),大家都遵守这个标准,就可以实现互相之间替换)
1、
接口是一个纯粹的抽象类
,接口里面的方法都是抽象方法 public abstract。
2、接口里面所有的属性public static final
final:最终的意思
final变量:这个变量就不能被修改,常量 public static final double PI = 3.1415;
final类:这个类就不能被继承
final方法:这个方法就不能被重写
静态属性、静态方法:
小区里面业主的房子可以看成一个一个的对象,这些都是属于特定的业主所独有。
但是小区里面也有一些公共设施(健身器材、绿地),这些公共设施是
属于这个小区的
。
但是是可以被所有的业主对象所使用的。
java类里面定义的静态变量和静态方法是属于这个类的,
不属于new出来的Student对象
,
但是可以被所有的对象所使用,
当类加载到内存,静态属性和静态方法就可以调用,这个时候没有new任何对象
。
使用时候:
1、静态的方法只能访问静态的方法和静态的属性(因为当前对象的实例可以没有创建,
所以静态的方法是没办法调用非静态的方法和属性的)
2、静态的方法中不能写this、super关键字(因为当前的对象实例可能还没有创建,
代表当前类对象的this还有代表父类对象的super可能都还没有创建)
非静态的属性和方法(实例属性和方法)必须通过new对象访问,而静态的属性和方法
是属于类的,在类加载到内存中就可以访问,被所有对象所共享。
抽象类:
1、抽象方法是没有方法体,如果这个类里面有抽象方法,这个类必须变成抽象类。
2、如果这个类是抽象类,并不要求这个类一定要有抽象方法
3、抽象类里面可以有普通方法,也可以有抽象方法。
4、如果一个类是抽象类,那么这个类就不能被new实例化,只能被其他类继承。
5、抽象方法可以理解为父类(抽象类)定义的一个模板或者规范(自己本身不实现),
子类必须实现这个抽象方法。如果子类不想实现这个方法,那么这个子类也必须要变成抽象类。
类和对象的总结:
1、现实世界都是由很多对象组成的,基于对象的共同特征抽象出类。
2、对象:真实存在的对象
3、类中包含:
1)所有对象所共有的特征--
属性(静)
2)所有对象所共有的行为--
方法(动)
4、类是对象的模板,对象是类的具体实例。
5、一个类可以创建多个对象:同一个类的不同对象,结构相同,数据不同。