① 封装
定义:隐藏类的内部实现细节,只对外暴露 “访问接口”(通过 getter/setter 方法),保护数据安全。
访问修饰符:控制属性 / 方法的访问权限(从严格到宽松:private → default → protected → public)。
// 私有属性(private:仅当前类可访问)
private String username;
private int age;
// getter方法:获取私有属性值
public String getUsername() {
return username;
}
// setter方法:设置私有属性值(可添加校验逻辑)
public void setUsername(String username) {
this.username = username; // this表示“当前对象”
}
public int getAge() {
return age;
}
public void setAge(int age) {
// 校验:年龄必须在0-120之间
if (age >= 0 && age <= 120) {
this.age = age;
} else {
System.out.println("年龄输入错误");
}
}
}
// 使用封装后的类
public class EncapsulationDemo {
public static void main(String[] args) {
User user = new User();
// user.username = "张三"; // 错误:private属性不能直接访问
user.setUsername("张三"); // 通过setter设置值
user.setAge(150); // 输出“年龄输入错误”(校验生效)
user.setAge(25);
System.out.println(user.getUsername() + ",年龄:" + user.getAge()); // 输出:张三,年龄:25
}
}
② 继承
定义:子类(子类)继承父类(超类)的属性和方法,实现代码复用;Java 单继承(一个子类只能有一个父类),但支持多层继承。
关键字:extends(继承)、super(调用父类的属性 / 方法 / 构造器)。
// 父类(Animal)
class Animal {
String name;
// 父类构造器
public Animal(String name) {
this.name = name;
}
// 父类方法
void eat() {
System.out.println(name + "在吃东西");
}
}
// 子类(Dog)继承父类(Animal)
class Dog extends Animal {
// 子类构造器:必须先通过super()调用父类构造器(默认调用无参,若父类无无参构造,需显式调用)
public Dog(String name) {
super(name); // 调用父类的有参构造器
}
// 子类重写(Override)父类方法:方法名、参数列表、返回值完全一致
@Override
void eat() {
super.eat(); // 调用父类的eat()方法
System.out.println(name + "在吃骨头"); // 子类扩展逻辑
}
// 子类独有方法
void bark() {
System.out.println(name + "在叫:汪汪汪");
}
}
// 测试继承
public class InheritanceDemo {
public static void main(String[] args) {
Dog dog = new Dog("小黑");
dog.eat(); // 输出:小黑在吃东西 → 小黑在吃骨头(重写生效)
dog.bark(); // 输出:小黑在叫:汪汪汪(子类独有方法)
}
}
③ 多态
定义:同一行为(方法)在不同对象上有不同表现(如 “吃”:狗吃骨头,猫吃鱼);前提是 “继承 + 方法重写”。
实现形式:父类引用指向子类对象(Animal animal = new Dog())。
// 父类(Animal)和子类(Dog、Cat)同上,Cat类重写eat()方法为“吃小鱼干”
public class PolymorphismDemo {
public static void main(String[] args) {
// 多态:父类引用指向子类对象
Animal animal1 = new Dog("小黑");
Animal animal2 = new Cat("小白");
// 调用eat()方法:实际执行的是子类重写后的方法(动态绑定)
animal1.eat(); // 输出:小黑在吃骨头
animal2.eat(); // 输出:小白在吃小鱼干
// 注意:父类引用不能调用子类独有方法(如animal1.bark()错误),需“强制类型转换”
if (animal1 instanceof Dog) { // instanceof:判断对象是否为某个类的实例
Dog dog = (Dog) animal1; // 强制转换为Dog类型
dog.bark(); // 输出:小黑在叫:汪汪汪
}
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。