面向对象——封装、继承、多态

本文深入探讨Java的四大核心概念:封装、继承、多态与抽象类,解析它们的作用与实现机制,包括private修饰符、方法重写、super关键字、抽象方法等关键知识点。

封装(javaBean)
把对象的属性和方法结合为一个整体,并尽可能隐藏内部实现细节
(1)隐藏内部实现细节,提供公共访问方式
提高了代码的复用性及安全性
private是封装的一种体现

class Animal{
//private进行限制
private String name
/在封装中要存在一个无参构造,不然有时候外部调用会报错
public Animal(){
}
public Animal(String name){
this.name=name;
}
//提供get/set方法
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
}

继承 (子类 Extends 父类 )
父类、超类、基类
子类、派生类
继承的本质在于抽象,类是对对象的抽象,继承是对一批类的抽象,对成员加以修饰符限制达到目的,可以减少代码的复用性

修饰符		内部类	同一个包		子类	任何地方
privte		可以
default		可以	可以
protected	可以	可以		可以
public		可以	可以		可以	可以

方法的重写(Override)
当父类的方法已经不能满足子类的需求了,但是子类又要用父类的这个功能,可以重写父类的方法

class Animal{
public void run{
System.out.println("动物会跑");
}
}

class Dog Extends Animal{
public void run{
System.out.println("狗飞速的奔跑");
}
}

注意:
重写必须保证子类与父类的方法名、形参列表保持一致,返回值类型及抛出的异常类型要小于或等于父类的,访问修饰符权限要大于或等于父类的
静态的方法不回重写,如果子类中有,必须为静态
final修饰的方法不能被重写
私有方法不会重写

super关键字
super代指父类对象,当子类方法中有与父类重名的局部变量时,为了调用父类中的属性,需要用super.属性来调用,不然就近原则就是本方法中的。
在子类的构造方法中,必须要用super()来调用父类的构造,且必须写在首行,子类中时无参构造,super()被省略
super和this都不能在static方法中

多态(Polymorphism)
多态就是一个对象具有多种表现形式,例如:一个人,他有名字,年龄什么属性吧,但他在家里就是爸爸(儿子),在社会上时工人,在学校他是学生,具有多重表现形式,这就是多态。

class Person{
int name;
}
class Student exdends Person {

}
public static void main(String [] args){
Person p = new Student();   // 父类引用指向子类对象--多态
}

使用多态的前提:
存在继承和方法重写
多态的优点:
1.减少代码间耦合
2.扩充性好
多态用于形参类型时,可以接收更多的数据
多态用于返回值时,可以返回更多的数据
注意细节

1.多态情况下,子父类存在同名的成员变量时,访问的是父类的成员变量
2.多态情况下,子父类存在同名的静态成员方法时,访问的是父类的方法
3.多态情况下,子父类存在同名的非静态方法时,访问的是子类的方法
4.多态情况下,不能访问子类中特有的成员

抽象类(abstract)
一个类被abstract修饰,为抽象类
一个方法被abstract修饰,为抽象方法,没有方法体

abstract class  A{
public abstract void  B();
}
class C implements A{
public void B(){
实现方法
}
}

抽象类注意的地方

1.如果一个类中有方法没有方法体,那么它必定被abstract修饰,他所在的类也是抽象类;
2.如果一个非抽象类继承了一个抽象类,那么必须实现所有抽象方法
3.不能被实例化,可以同时存在抽象与非抽象方法
4.抽象类中存在构造方法,是提供给子类初始化用的
5.不能与static、private、final一起修饰一个方法

接口(interface)
定义接口:

class interface 接口名{
}

实现接口

class A implements 接口名{
}

接口作用:
1.程序的解耦
2.制定约束规范
3.拓展需求功能

定义接口需要注意的地方

1.接口是一个特殊的类,它没有构造方法,不能被实例化
2.接口中定义的定义的变量默认加修饰符 public static final,也就是一个常量,必须赋值
3.接口中,方法默认被public abstract(抽象方法)
4.非抽象类实现接口,必须实现所有抽象方法
5.先继承后实现	 class A exdents B implements C
6.接口可以多继承多个接口,一个类可以实现多个接口
### Java 面向对象编程中的封装继承多态 #### 封装示例 通过创建`BankAccount`类展示如何隐藏数据并提供公共接口访问私有字段。 ```java class BankAccount { private String accountNumber; private double balance; public BankAccount(String accountNumber, double initialBalance) { this.accountNumber = accountNumber; if (initialBalance > 0.0d) { this.balance = initialBalance; } } public void deposit(double amount) { if (amount > 0.0d) { balance += amount; } } public boolean withdraw(double amount) { if (balance >= amount && amount > 0.0d) { balance -= amount; return true; } else { return false; } } public double getBalance() { return balance; } @Override public String toString() { return "账户号码:" + accountNumber + "\n余额:" + balance; } } ``` 此代码实现了银行账户的基本功能,包括存款、取款以及获取当前余额的操作。所有敏感信息都被设置为private修饰符保护起来[^1]。 #### 继承示例 定义了一个基类`Animal`及其派生类`Dog`,展示了子类可以扩展父类的功能。 ```java // 定义动物类作为超类 class Animal { protected String name; public Animal(String name) { this.name = name; } // 动物发声的方法,在这里只是简单打印一条消息 public void makeSound() { System.out.println(name + ": 发出声音..."); } } // 创建狗类继承自动物类 class Dog extends Animal { public Dog(String name) { super(name); } // 覆盖makeSound方法以实现特定于狗的行为 @Override public void makeSound() { System.out.println(name + ": 汪汪!"); } } ``` 这段代码说明了如何利用继承机制让新类型的对象不仅具有原有类型的数据成员服务,还可以添加新的特性行为[^2]。 #### 多态示例 下面的例子进一步解释了多态的概念——即同一个引用变量可以在不同情况下指向不同类型的实际对象,并调用相应版本的方法。 ```java public class PolymorphismExample { public static void main(String[] args){ // 使用父类引用指向不同的具体子类实例 Animal myPet = new Dog("Buddy"); myPet.makeSound(); // 输出:Buddy: 汪汪! // 更改myPet所指的对象而不改变其声明类型 myPet = new Cat("Whiskers") { @Override public void makeSound(){ System.out.println(getName()+": 喵喵~"); } private String getName(){return "Cat";}; }; myPet.makeSound(); // 输出:Whiskers: 喵喵~ } } abstract class Cat extends Animal{ public Cat(String name){super(name);} } ``` 上述例子中,虽然`myPet`被声明为`Animal`类型,但它实际上可以持有任何继承自`Animal`的具体类的实例;当调用`makeSound()`时,会执行对应实际对象所属类里定义的那个版本的方法[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值