面向对象的三大特征是封装、继承、多态。
封装
封装指的是将某些信息隐藏在类的内部,不允许外部程序直接访问,但是可以通过该类提供的公有方法,来实现对隐藏信息的操作和访问。
举个例子,就比如一台手机,内部非常复杂的,一般用户不需要了解它的内部,手机厂商把手机封装起来,对外提供了一些“公有方法”——显示屏、按键、耳机孔等,从而用户就可以很方便的使用手机。
上代码:
public class Dog {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
这是一个狗狗类name
和age
都是private,意思就是说除了Dog
类本身外,其他任何类都不可以访问这些属性(见Java访问权限),但是这边提供了public的get()
和set()
的方法,可以通过set()
方法来对其进行赋值,get()
方法来对其进行取值。this
是来引用成员变量(见成员变量和局部变量)
public class MyDog {
public static void main(String[] args) {
Dog erha = new Dog();
erha.setName("二哈");
erha.setAge(2);
System.out.println("名字:" + erha.getName());
System.out.println("年龄:" + erha.getAge());
}
}
然后在一个新的类中,new出了一个erha来,利用set()
方法来给erha取名叫“二哈”,同时也设置了年龄为“2”,再往下使用了get()
方法来获取到了erha的名字和年龄。全程都没有直接使用name
和age
来赋值取值,而是使用他提供的公有方法get()
和set()
。
运行MyDog输出结果:
名字:二哈
年龄:2
继承
继承可以直接获得父类的属性和方法并进行扩展,从而产生新的类。已经存在的类称为父类,而新的类称为子类。
上代码:
public class Husky extends Dog {
public void destroy() {
System.out.println("我喜欢拆家");
}
}
新建一个哈士奇类,哈士奇也是狗狗,所以继承Dog
类。哈士奇喜欢拆家,再给他定义个destroy
方法。
public class MyDog2 {
public static void main(String[] args) {
Husky erha2 = new Husky();
erha2.setName("小二哈");
System.out.println("我叫" + erha2.getName());
erha2.destroy();
}
}
然后在一个新的类中,new出了一个erha2来。注意这一次类名不是Dog
, 而是Husky
,这样做就是使得这个erha2不仅可以使用Dog
父类的属性和方法,还可以使用Husky
子类自己的属性和方法。所以运行MyDog2输出结果:
我叫小二哈
我喜欢拆家
多态
多态是指在父类被子类继承之后,不同子类执行同一操作,可以有不同的解释,产生不同的执行结果。
详情可参考:再来个小记,Java方法重写(Method Overriding)