java 面向对象编程OOP,封装、继承、多态、抽象、接口
时间:2025-4-1 17:03 作者:杨佳乐 分类: Java
public class Demo3 {
// 面向对象编程
public static void main(String[] args) {
DemoPerson dp1 = new DemoPerson("test",20);
System.out.println("name:"+dp1.getName());
dp1.setName("new test");
dp1.display();
// 继承调用
Dog dog1 = new Dog("小白");
// 调用父类方法
dog1.eat();
// 调用子类方法
dog1.bark();
// 多态
// 多态的作用
// 父类引用指向子类对象,调用方法时,执行子类的实现。
//
// 提升代码的通用性,可以用同一变量表示不同子类。
// 多态的核心: ✔ 父类引用可以指向子类对象
// ✔ 方法执行时,调用的是子类的实现(动态绑定)
Animal animal1 = new Dog("小白狗"); // 形成多态的基础条件,前面的类型是父类 Animal
animal1.makeSound();
animal1 = new Cat("小黑猫"); // 切换为Cat子类
animal1.makeSound();
// 抽象测试
Vechicle1 v1 = new Vechicle1();
v1.display();
v1.testfunc();
Vechicle2 v2 = new Vechicle2();
v2.display();
v2.testfunc();
// 接口测试
testInter1 ti1 = new testInter1();
ti1.display();
ti1.success();
// 总结
// 特性 作用
// 封装 保护数据,使用 getter/setter
// 继承 代码复用,子类继承父类
// 多态 统一父类类型,调用子类方法
// 抽象 提供标准,子类实现
// 接口 定义行为,可多实现
}
}
// 封装Person类
class DemoPerson{
// 私有属性
private String name;
private int age;
// 构造方法
public DemoPerson(String name,int age){
this.name = name;
this.age = age;
}
// 获取name
public String getName(){
return name;
}
// 设置name
public void setName(String name){
this.name = name;
}
// 展示信息
public void display(){
System.out.println("my name is:"+name+",age:"+age);
}
}
// 继承
//继承的作用
//代码复用:子类继承父类的属性和方法,避免重复代码。
//提高可扩展性:新功能可以通过继承来扩展,而不需要修改已有代码。
// 父类
class Animal{
String name;
public Animal(String name){
this.name = name;
}
public void eat(){
System.out.println(name + " is eating");
}
public void makeSound() {
System.out.println("Animal makes a sound.");
}
}
// 子类继承父类
class Dog extends Animal{
public Dog(String name){
// 调用父类构造方法
super(name);
}
// 子类特有方法
public void bark(){
System.out.println(name + " is barking");
}
// 重写父类方法
@Override //注解,推荐增加
public void eat(){
// 重写的特点: ✔ 方法名、参数必须 和父类方法完全一致
// ✔ 访问权限不能比父类更严格(父类 public,子类不能 private)
// ✔ 需加 @Override 注解(可选,但推荐)
System.out.println("这是dog重写后eat方法");
}
@Override
public void makeSound() {
System.out.println("Dog barks.");
}
}
// 多态子类
class Cat extends Animal{
public Cat(String name){
// 调用父类构造方法
super(name);
}
@Override
public void makeSound() {
System.out.println("Cat barks.");
}
}
// 抽象类
// 抽象类不能实例化,子类必须实现里面的抽象方法,可以有普通方法
abstract class Vehicle{
// 定义一个抽象方法,子类必须实现
abstract void display();
// 具体方法,子类可以直接继承
public void testfunc(){
System.out.println("抽象具体方法");
}
}
class Vechicle1 extends Vehicle{
public void display(){
System.out.println("Vechicle1类实现display");
}
@Override
public void testfunc(){
System.out.println("重写抽象具体方法");
}
}
class Vechicle2 extends Vehicle{
public void display(){
System.out.println("Vechicle2类实现display");
}
}
// 接口
// 定义行为标准,不同类可以实现相同接口。
// 支持多继承(Java 不能多继承类,但可以实现多个接口)。
// ✔ 只能定义方法(不能有实例变量)
// ✔ 类用 implements 关键字实现接口
interface testInter{
void display();// 定义方法
}
interface testInterTo{
void success();
}
class testInter1 implements testInter,testInterTo{
public void display(){
System.out.println("testInter1子类实现接口方法display");
}
public void success(){
System.out.println("testInter1子类实现接口方法success");
}
}