其实封装、继承和多态不仅仅是java的特性,而是所有面向对象程序的三大特性。
封装就是对类内部的实现细节进行隐藏,然后对类外提供公开的接口。

封装一般就是我们把类属性加上private进行修饰,把属性进行私有化。
- public class Student {
-
- private String name;
-
- private int age;
-
- private int classid;
- }
在这个学生类中,我们把name和age以及classid属性被设置为私有的,那么它只能被这个类访问,而不能被其他类访问,因此信息是隐藏的。为了让外部进行访问,我们还可以为每个属性提供公开的方法:Getter and Setter
![]()
- 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;
- }
-
- public int getClassid() {
- return classid;
- }
-
- public void setClassid(int classid) {
- this.classid = classid;
- }
因此,如果外部类想要访问类中私有成员变量的都必须使用这些getter和setter方法。
封装的优点:良好的包装可以减少耦合;类的内部结构可以自由修改;可以更精确地控制成员变量;隐藏信息和实现细节。
在Java中,可以通过extends关键字申明一个类是从另一个类继承而来的:
- class 父类 {
-
- }
-
- class 子类 extends 父类 {
-
- }
继承其实是父类对子类的共性的抽取, 实现代码的复用。



一个引用调用同一个方法,因为这个引用 引用的对象不一样,导致调用这个方法,所表现出来的行为不一样。这种思想就叫做多态。
- public class Animal {
- String name;
- int age;
-
- public Animal(String name, int age){
- this.name = name;
- this.age = age;
- }
- public void eat(){ //重写了eat方法
- System.out.println(name + "吃饭");
- }
- }
- public class Cat extends Animal{
- public Cat(String name, int age){
- super(name, age);
- }
- @Override //重写了eat方法
- public void eat(){
- System.out.println(name+"吃鱼~~~");
- }
- }
-
- public class Dog extends Animal {
- public Dog(String name, int age){
- super(name, age);
- }
- @Override
- public void eat(){
- System.out.println(name+"吃骨头~~~");
- }
- }
-
- ///分割线//
-
-
-
- public class TestAnimal {
- // 编译器在编译代码时,并不知道要调用Dog 还是 Cat 中eat的方法
- // 等程序运行起来后,形参a引用的具体对象确定后,才知道调用那个方法
- // 注意:此处的形参类型必须时父类类型才可以
- public static void eat(Animal a){
- a.eat();
- }
- public static void main(String[] args) {
- Cat cat = new Cat("元宝",2);
- Dog dog = new Dog("小七", 1);
- eat(cat); //元宝吃鱼
- eat(dog); //小七吃骨头
- }
- }