1.封装
核心理念:【合理隐藏,合理暴露】
java
package com.popo.fengzhuang;
public class Student {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
// Added age validation
public void setAge(int age) {
if (age < 0) {
throw new IllegalArgumentException("Age cannot be negative.");
}
this.age = age;
}
}
2.继承
子类能继承父类的非私有成员,子类对象由子类和父类共同完成
java
package com.popo.jicheng;
public class People {
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;
}
}
java
package com.popo.jicheng;
public class Student extends People {
private String studentId;
public String getStudentId() {
return studentId;
}
public void setStudentId(String studentId) {
this.studentId = studentId;
}
}
java
package com.popo.jicheng;
public class extendDemo1 {
public static void main(String[] args) {
// 子类对象由子类和父类共同完成,所以也有name和age属性
Student student = new Student();
student.setName("张三");
student.setAge(18);
student.setStudentId("001");
System.out.println(student.getName() + " " + student.getAge() + " " + student.getStudentId());
}
}
3.权限修饰符

4.多态
把子类对象赋值给父类变量,存在方法重写
java
package com.popo.duotai;
public class People {
String name = "People";
public void run(){
System.out.println("People is running");
}
}
java
package com.popo.duotai;
public class Student extends People {
String name = "Student";
@Override
public void run() {
System.out.println("Student is running");
}
}
java
package com.popo.duotai;
public class Teacher extends People {
String name = "Teacher";
@Override
public void run() {
System.out.println("Teacher is running");
}
}
java
package com.popo.duotai;
public class DuotaiDemo1 {
public static void main(String[] args) {
// 只讨论对象和行为的多态,不考虑变量的多态
People p1 = new Teacher();
// 编译看左边,运行看右边
p1.run(); // 输出: Teacher is running
System.out.println(p1.name); // 输出: People
People p2 = new Student();
p2.run(); // 输出: Student is running
System.out.println(p2.name); // 输出: People
}
}
如果要使用子类独有的方法,可以使用强制类型转换:子类型 变量 = (子类型)(new 父对象)
使用instanceof可以判断父对象是否与子类型对应
java
package com.popo.duotai;
public class DuotaiDemo2 {
public static void main(String[] args) {
People p1 = new Teacher();
People p2 = new Student();
goRun(p1); // 输出: Teacher is running
goRun(p2); // 输出: Student is running
}
public static void goRun(People p) {
if (p instanceof Teacher) {
Teacher t = (Teacher) p;
t.run();
} else if (p instanceof Student) {
Student s = (Student) p;
s.run();
} else {
p.run();
}
}
}