一、面向对象编程
Java和C++一样,是面向对象的编程语言。Java程序也是面向对象的程序,基本单位是每一个对象,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。面向对象相比面向过程是更进一步对逻辑的抽象和封装。
对象的创建使用new关键字,例如 Date date = new Date() 即:类名 对象引用名 = new 类的构造器,然后就可以使用这个对象引用名来对这个对象进行操作
下面是一个新建的Lady类的代码,测试Lady对象的创建和使用:
![]()![]()```
package chapter4;
/用import语句引用类库其他包中的类,如果这里没有Import语句,程序中所有要使用这些类的地方就需要使用完整的包路径+类名
如所有的ArrayList 就都要替换为 java.util.ArrayList
可以使用 指定某个包中所有的类 如java.util.就导入了java.util包中所有的类/
import java.util.*;
import java.util.List;
/**
@Auther: guanjian
@Date: 2021/3/3 15:21
@Description:
*/
public class Lady {
private String name;
private int age;
private int height;
private int weight;
ArrayList hobbys;
//构造器的名称必须和类名一致
//无参数的构造器,如果没有构造器,类会默认拥有一个无参数的构造器,无需手动创建。但是下面有一个参数的构造器
//在有其他构造器的情况下,这个类不再会默认拥有一个无参构造器,要使用无参构造器,必须手动的创建一个无参构造器
public Lady(){};
//有参数的构造器,通过这个构造器的参数初始化对象的属性。
public Lady(String name,int age,int heigit,int weight){
this.name=name;
this.age=age;
this.height=heigit;
this.weight=weight;
}
//设置姓名
public void setName(String name){
this.name=name;
}
//设置年龄
public void setAge(int age){
this.age=age;
}
//设置身高
public void setHeight(int height){
this.height=height;
}
//设置体重
public void setWeight(int weight){
this.weight=weight;
}
//设置兴趣
public void sethobbys(ArrayList hobbys){
this.hobbys=hobbys;
}
//获得姓名
public String getName(){
return this.name;
}
//获得年龄
public int getAge(){
return this.age;
}
//获得身高
public int getHeight(){
return this.height;
}
//获得体直
public int getWeight(){
return this.weight;
}
//获得爱好
public void getHobbys(){
System.out.println("唱跳、rap和篮球,哦哦,及你太美~哦哦~");
}
//测试下这个Lady对象
public static void main(String[] args) {
Lady lady = new Lady("蔡徐坤的小迷妹",18,180,200);
System.out.println("这位女士你好,请介绍下你自己。");
System.out.println("我是"+lady.getName()+",年芳"+lady.getAge()+",身高"+lady.getHeight()+",体重"+lady.getWeight()+"公斤");
System.out.println();
System.out.println("你的爱好是什么?");
lady.getHobbys();
}
}
View Code
对一个Lady类的Lady对象的采访结果:
![]()
Lady类的数据都用了private关键字修饰,所以这些数据只能由这个类访问,不能从外部的类的方法中直接访问,如其他的类不能通过 lady.age直接得到lady的age,只能调用lady类中访问修饰符为public的方法来获取这些数据,如 lady.getAge() 获得lady的age数据。一些功能也可以通过访问权限修饰符或隐藏或公开。
关于JAVA面向对象的设计思想中类与类之间的关系描述可以参考这篇博客,写的挺直观详细 [https://www.cnblogs.com/liuling/archive/2013/05/03/classrelation.html](https://www.cnblogs.com/liuling/archive/2013/05/03/classrelation.html)
总的来说,类与类之间的关系有:继承关系(is-a/extends) 、实现关系(implements)、依赖关系(uses-a)、关联关系(frequently-uses-a)、 聚合关系(has-a/整体与局部且局部可拆解)、组合关系(contains-a/整体与局部且局部不可分割)。
其中关联关系是一种强依赖关系,而聚合关系和组合关系是关联关系中的两个特例,聚合关系就像房间和沙发的关系,组合关系就像人和人的大脑的关系。
Java面向对象的特性,可以把那些或简单或复杂的业务逻辑设计为 一个个的Java对象的操作和交互,把业务中的各种数据和各种业务逻辑抽象封装成 一个个类,通过各个类中封装的接口来进行业务中的数据修改和数据交互。
二、JAVA访问权限控制:public、private、protect、无访问修饰符
public 修饰的类、接口、变量和方法对这个类以及所有其他的类都可见
protect 修饰的变量和方法对这个类以及和这个类同一个包中的类可见,并且其他包中的子类可以继承父类中用protect修饰的变量和方法,但是其他包中的子类不可以通过父类的实例对象直接访问父类用protect修饰的变量和方法
private 修饰的内部类、变量、方法仅对这个类可见,其他类不可以直接访问
default (无访问修饰符)修饰的类、接口、变量、方法对这个类以及和这个类同一个包中的类可见,其他包中的类不可以直接访问
(注:以上黄色标记部分是这些修饰符可以修饰的全部元素)
对于Java的访问权限这篇博文总结的也比较全面,魔法链接:[https://www.cnblogs.com/hi-wanghong/p/9741494.html](https://www.cnblogs.com/hi-wanghong/p/9741494.html%20%20%20)