- 封装:
想象一下,你有一个神秘的盒子,这个盒子就是我们的“对象”。你只知道这个盒子有几个按钮(这就是对象的“方法”),但你不知道盒子里面是什么,你也不能直接打开它看(这就是“封装”的概念)。你只能按盒子上的按钮,而按钮会执行一些操作(比如打开灯光、播放音乐等),但你不会知道这些操作是如何在盒子内部实现的。这就是封装的好处,它隐藏了对象的内部细节,只暴露必要的功能给外部使用。封装主要通过修饰符实现。
在Java中,我们使用private
、protected
和public
这些访问修饰符来控制哪些属性和方法是可以从外部访问的,哪些是不可以的。
出于封装的考虑,public用的较少,private比较常见。
接口的定义与实现
public interface Animal {
void makeSound();
void eat();
}
public class Dog implements Animal {
private String name;
}
包的定义与实现
注:在Java中,创建包(package)只需在源文件的顶部声明一个
package
语句。这个语句必须位于任何import语句或类定义之前。
package com.example.main;
import com.example.implementations.Cat;
import com.example.implementations.Dog;
访问模式 | 同一个类 | 同一个包 | 子类 | 所有类 |
---|---|---|---|---|
public | 允许访问 | 允许访问 | 允许访问 | 允许访问 |
protected | 允许访问 | 允许访问 | 允许访问 | |
default | 允许访问 | 允许访问 | ||
private | 允许访问 |
- 继承:
想象你有一个“动物”的盒子,这个盒子里有一些基本的特性和行为(比如吃东西、睡觉等)。然后,你决定制作一个新的盒子,叫做“狗”。因为狗也是动物,所以你可以从“动物”这个盒子里复制所有的东西到你的“狗”盒子里,然后再添加一些新的特性(比如吠叫、摇尾巴等)。这个过程就是“继承”。
父类是共性,子类是特性,继承性是基于qi减少代码的需要,这样代码几乎不会重复。
在Java中,你可以通过extends
关键字来创建一个子类(如“狗”类),它继承了一个父类(如“动物”类)的所有属性和方法。然后,你可以在子类中添加新的特性或重写父类的方法。
class Employee{
public int workYear;
public Employee(){
workYear=1;
}}
public class Teacher extends Employee{
public int classHour;
public Teacher(){
classHour=96;
}
public void printInfo(){
System.out.println("Work Year: "+workYear);
System.out.println("Class Hour: "+classHour);
}
public static void main(String[] args){
Teacher tom=new Teacher();
tom.printInfo(); 2024-05-182024-05-18
}
}//Teacher通过extends Employee继承了Employee的workYear,并添加了新特性classHour
- 构造方法的继承:java虚拟机一般会自动隐式地调用其直接父类的不含任何参数的构造方法,但如果有参数,应用suoer调用父类地被重写方法。
- 继承相关关键词介绍
-
- super
当需要在子类中调用父类的被重写方法时,要使用 super 关键字。
super意为上一级的,父级的。
- super
class Animal{
public void move(){
System.out.println("动物可以移动");
}
}
class Dog extends Animal{
public void move(){
super.move(); // 应用super类的方法
System.out.println("狗可以跑和走");
}
}
public class TestDog{
public static void main(String args[]){
Animal b = new Dog(); // Dog 对象
b.move(); //执行 Dog类的方法
2024-05-27
}
}
-
- this
在Java中,this
关键字用于引用当前对象的实例。当你在类的某个方法中引用类的成员变量或方法时,如果成员变量或方法与方法的参数名相同,或者存在局部变量名与成员变量名相同的情况,那么this
关键字可以帮助你区分它们。
- this
public SaveAccount(double deposit){
this.deposit=deposit;
this.yearRate=0;
}
- 多态:
多态是一个比较抽象的概念,但我可以尽量用简单的语言来解释。想象一下你有一个“叫”的按钮,它可能装在“狗”的盒子上,也可能装在“猫”的盒子上。当你按下这个按钮时,不同的盒子会有不同的反应(狗会吠叫,猫会喵喵叫)。这就是多态:同一个方法(或操作)在不同的对象上可以有不同的行为。
多态性意为同名同方法多态。相同的方法名称,相同的方法操作,不同的参数列表或继承重载。
在Java中,你可以通过方法的重写和接口的实现来实现多态。这样,你就可以在运行时动态地决定要执行哪个对象的方法,而不是在编译时就确定。
多态存在的三个必要条件
- 继承
- 重写
- 父类引用指向子类对象:Parent p = new Child();
重写(Override)是指子类定义了一个与其父类中具有相同名称、参数列表和返回类型的方法,并且子类方法的实现覆盖了父类方法的实现。 即外壳不变,核心重写!
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。同类内,静态。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。