没有封装
面向对象的三大特征:
封装:好处:1.封装之后,看不到这个事物比较复杂的一面,只能看到简单的一面
复杂性封装,对外提供简单的操作入口,比如照相机(内部原理很复杂,但是操作起来很简单)
2.封装之后才会形成真正的对象,真正的独立
3.封装就意味着以后的程序可以重复使用,并且这个事物的适用性比较强,在任何场合都可以用
4.封装之后,对于事物本身提高了安全性。
继承
多态
定义一个User类
package Test2;
public class User {
int age;
String name;
}
定义UserTest测试类
package Test2;
public class UserTest {
/**
* 对于当前程序来说,user类中的age属性在外部程序中可以随意访问,导致age属性的不安全。
* 一个user对象表示一个对象,用户的年龄不可能为负数,以下程序中年龄值是负数,但是没有报错
* 这是当前程序存在的缺陷
* @param args
*/
public static void main(String[] args) {
User user = new User();
user.name ="大明";
user.age=-100; //可以随意访问,没有封装。建议被user类型进行封装,在外部程序中不能随便访问user中的属性
System.out.println(user.age);
}
}
封装之后
对于数据的访问形式:
- 读取值(get)
- 修改值(set)
封装的步骤:(操作入口变成了只能通过set和get方法进行访问)
- 所有属性私有化,使用
private关键字
进行修饰。private修饰所有的数据只能在本类中访问 - 对外提供简单的操作入口。也就是说想要访问age属性必须通过入口进行访问
对外提供两个公开的方法,分别是set
和get
想修改
age就调用set
向读取
age就调用get - set方法的命名规范:
public void set+属性名首字母大写(形参){
}
public void setAge(int a){
age=a;
}
- get方法的命名规范:
public int getAge(){
return age;
}
setter and getter
方法没有static
关键字
有static关键字的方法用法:类名.方法名(实参);
没有static关键字的方法用法:引用.方法名(实参);
也可以在代码片段里右键 source - setter and getter
定义一个user类
package Test3;
* @author Administrator
*
*/
public class User {
private int age; //进行了私有化,但是就在外面彻底访问不到了(UserTest类也不行)
public void setAge(int a){
//编辑业务逻辑代码进行安全控制
if(a<0 || a>150){
System.out.println("输入的年龄不合法");
return;
}//如果程序执行到了这里,说明age的年龄是合法的,就可以进行赋值运算
age = a;
}
public int getAge(){
return age;
}
}
package Test3;
public class UserTest {
/**
* @param args
*/
public static void main(String[] args) {
User user=new User();
//System.out.println(user.age); 有了private修饰,使用这个方法已经访问不到了
user.setAge(-100); //不合法年龄
user.setAge(10);
int age=user.getAge();
System.out.println(age);
}
}