Java三大特性——封装、继承、多态
- 一、封装
- 二、继承
- 三、多态
一、封装
封装就是隐藏对象的属性和实现细节,提供公共方法对其进行访问。
常用之一:成员变量私有化(private),对外提供对应的set/get方法进行访问(构造方法)
private:权限修饰符,修饰成员变量,将其私有化,仅本类中可以使用。
public class Person {
private int id;
private String name;
private Person person;
public Person() {
//默认无参构造方法,也可以设置有参构造方法
}
public void setName(String name) {
this.name = name;
}
public String getName(String name) {
return name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
二、继承
继承:从已有的类派生新的类,新类具有已有类的属性和行为,并扩展新的功能。已有的类叫做父类或超类, 派生的类叫做子类,子类继承父类。关键字extends.
3点注意:
1、子类拥有父类对象所有的属性和方法(包括私有属性和私有方法),但是父类私有属性和私有方法只能无法访问只能拥有;
2、子类扩展自己的属性和方法;
3、子类可以用自己的方式实现父类的方法(重写)
父类:
public class FuPerson {
private int a = 1;
private int id;
private String name;
private Person person;
private int age;
public FuPerson() {
//默认无参构造方法,也可以设置有参构造方法
}
public void setName(String name) {
this.name = name;
}
public String getName(String name) {
return name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
//普通方法
public void say() {
System.out.println("person say..");
}
public void run() {
System.out.println("person run....");
}
//父类的私有方法
private void show() {
System.out.println("person show...");
}
}
子类:
public class ZiPerson extends FuPerson {
@Override//重写
public void say() {
super.say();//调用父类的方法
}
@Override
public void run() {
super.run();//调用父类的方法
}
public static void main(String[] args) {
ZiPerson stu = new ZiPerson();
//stu.a=1;//子类对象对父类的私有成员变量使用报错!
//stu.show();//子类对象调用父类的私有方法,同样报错!
stu.say();
stu.run();
}
}
三、多态
程序中定义的引用变量所指向的具体类型和通过该引用变量的方法调用在编程是并不确定,而是在运行时确定
实现运行时多态需要三个条件:1.继承(包括接口的实现);2.方法的重写;3.父类的引用指向子类对象。 运行时多态主要是指父类的引用不仅可以指向父类对象,也可以指向子类对象,当指向子类对象时, 如果调用的方法父类没有,则报错;如果子类有而没有重写父类方法,会调用父类方法,如果子类有而重写了父类方法,则会优先调用子类方法
编译时多态主要是指方法的重载,在同一个方法中,有多个方法名相同参数列表不同的方法,在编译期可以确定调用那个方法。