前文请参考
https://old-blog.manqiu.top/2020/06/05/java-learn-1/
面向对象核心技术
类的封装
封装是面向对象编程的核心思想,封装的载体是类,且对象的属性和行为被封装在这个类中。
看了一下书上给的例子,感觉蛮奇怪的,她并没有讲述清楚这个过程,还是自己查一下吧
定义:将对象的属性和方法相结合,通过方法将对象的属性和实现细节保护起来,实现对象的属性隐藏。
做法:修改属性的可见性来限制对属性的访问,并为每个属性创建一对取值(getter)方法和赋值(setter)方法,用于对这些属性的访问。
具体步骤:
- 修改属性的可见性来限制对属性的访问。
- 为每个属性创建一对赋值方法和取值方法,用于对这些属性的访问。
- 在赋值和取值方法中,加入对属性的存取限制。
参考:https://blog.csdn.net/weixin_44015669/article/details/90145234
具体以代码来看看是什么意思吧
public class Restaurant {
private Cook cook = new Cook();
public void takeOrder(String dish){
cook.cooking(dish);
System.out.println("[*] 您的菜做好了");
}
public String saySorry(){
return "[*] 抱歉本餐厅不支持此项服务";
}
public static void main(String[] args) {
Restaurant waiter = new Restaurant();
System.out.println("[-] 请厨师为我做一份香辣肉丝");
waiter.takeOrder("香辣肉丝");
System.out.println("[-] 你们厨师叫什么名字");
System.out.println(waiter.saySorry());
System.out.println("[-] 请让厨师给我切一点葱花");
System.out.println(waiter.saySorry());
}
class Cook{
private String name;
public Cook(){
this.name = "Tom";
}
private void cutOnion(){
System.out.println("[*] " + name + "切葱花");
}
private void washVegetavles(){
System.out.println("[*] " + name + "洗菜");
}
void cooking(String dish){
washVegetavles();
cutOnion();
System.out.println("[*] " + name + "开始做饭" + dish);
}
}
}
看看差不多就明白了8
类的继承
基于某个父类的扩展,并制定出一个新的子类,子类可以继承父类原油的属性和方法,也可以增加原来父类所不具备的属性和方法,或者重写父类中的某些方法。
extends
Child extends parents
子类child集成了父类parents类,也继承了方法和属性
方法重写
在子类中将父类的成员方法名称保留,重新编写父类成员方法的实现内容,更改成员方法的存储权限,或是修改成员方法的返回值类型。
需要注意的是,重写父类方法的时候,修改方法的修饰权限只能从小的范围到打的范围改变,如protected 只能改为public 不能改为private。
如果子类重写了父类方法,又想实现父类原有的方法,使用super关键字
所有类的父类--Object类
在 JAVA 中,所有的类都直接或间接地继承了java.lang.Object类,他是所有类的父类,是 Java 类层中的最高类层,当创建每一个类,除非指定从其他类继承,否则都是继承java.lang.Object
getClass()
该方法会返回某个对象执行时的Class实例,然后通过Class实例调用getName()方法获取类的名称。
getClass().getName()
toString()
该方法会返回某个对象的字符串表示形式,当打印某个类对象的时候,会自动调用其重写的toString方法
public class Hello {
public String toString() { // 重写toString()方法
return "Say “" + getClass().getName() + "” to Java";
}
public static void main(String[] args) {
System.out.println(new Hello()); // 打印SayHello类的实例对象
}
}
将会打印Say “hello” to Java.
equals()
比较两个内容相同的两个字符串和两个test类的对象是否向相等
class V { // 自定义类V
}
public class OverWriteEquals {
public static void main(String[] args) {
String s1 = new String("123"); // 实例化两个对象,内容相同
String s2 = new String("123");
System.out.println(s1.equals(s2)); // 使用equals()方法调用
V v1 = new V(); // 实例化两个V类对象
V v2 = new V();
System.out.println(v1.equals(v2)); // 使用equals()方法比较v1与v2对象
}
}
//result:true false