面向对象基础篇
包的访问控制
为了更好的管理类,把多个类收集在一起成为一组,称为软件包。
包声明和导入
新建包: 右键 src -> 新建 -> 软件包
- 包名通常会用域名的颠倒形式,如baidu.com域名,包就可以命名为com.baidu。
- 包名要和代码路径相匹配。
- 如果一个类没有 package 语句, 则该类被放到一个默认包中。
我们可以将类放入到包中:
package com.test; //在放入包中,需要在类的最上面添加package关键字来指明当前类所处的包
public class Main {
public static void main(String[] args) {
}
}
不同的类可以放在不同的包中
当我们使用同一个包中的类时,直接使用即可。而当我们需要使用其他包中的类时,需要先进行导入才可以:
package com.test;
import com.test.entity.Person;//使用import关键字导入其他包中的类
public class Main {
public static void main(String[] args) {
Person person=new Person();//导入后才可以使用
}
}
如果一个包中有多个类,可以使用*表示导入这个包中的全部类:
import com.test.entity.*;
有歧义的情况下需要使用完整的类名。
访问权限控制
四种访问权限
当前类 | 同一个包下的类 | 不同包下的子类 | 不同包下的类 | |
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
默认 | √ | √ | × | × |
private | √ | × | × | × |
我们创建的普通类不能是protected或private权限
封装、继承和多态
面向对象程序三大特性:封装、继承、多态。
类的封装
编写时一般将成员变量私有化:
public class Person {
private String name;
private int age;
private String sex;
public Person(String name, int age, String sex) { //构造方法需声明为公共
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name; //对象的名字必须通过getName()方法来获取,并且只能得到名字值,外部无法修改
}
public int getAge() {
return age;
}
public String getSex(){
return sex;
}
}
public class Main {
public static void main(String[] args) {
Person person=new Person("小明",20,"男");
System.out.println(person.getName());
}
}
额外的操作:小明可以修改名字,但是名字中不能包含“小”字
public void setName(String name){
if(name.contains("小"))return;
this.name=name;
}
也可以将构造方法改成私有的,需要通过内部的方式来构造对象:
public class Person {
private String name;
private int age;
private String sex;
private Person() {} //不允许外部使用new关键字创建对象
public static Person getInstance(){ //而是需要使用我们独特的方法来生成对象并返回
Person person=new Person();
person.name="小明";
return person;
}
......
下篇继续...