2018.3.27
面向对象的三大特征之封装
class Person {
//成员变量
private String name;//使用private修饰name属性,
private int age;
private char sex;
/* 完成私有化成员变量的setter和getter方法 要求setter方法的名字是 set成员变量名(所需参数) 成员变量名首字母大写 */
public void setName(String n) {
name=n;
}
public String getName() {
return name;
}
public void setAge(int n) {
//age属性生活当中,最起码是没有负数。年纪最大 130
//这里要做判断。
if(n<0||n>130) {
age=16;
}else {
age=n;
}
}
public int getAge() {
return age;
}
public void setSex(char g) {
if('m'==g||'w'==g) {
sex=g;
}else {
sex='m';
}
}
public char getSex() {
return sex;
}
//成员方法
/* * 代码中,程序只会严格的执行语法规范,数据类型检查,但是不会判断你传入的参数是否和生活实际有冲突。 * * 有一些代码可以符合代码的逻辑,但是完全不符合生活逻辑 * 不符合生活逻辑的 代码是没有任何意义的。 * * * 思考: * 在对成员变量进行赋值的时候,基于语法规范的情况下,要对数据进行一定的约束和判断,让他符合生活逻辑。 * * * 【封装思想】 * 权限修饰符: * public;公开的,公用的。使用public修饰的成员变量或者成员方法任何人都可以通过对象直接使用。 * private;私有的 如果使用private修饰的成员变量或者成员方法只能在【类内】 eg:class{}使用,类外谁都不能用。 * 问题A: * 用private修饰的成员变量和成员方法,类外都不能使用。怎么给成员变量赋值? * 【解决问题】 setter和getter方法 * setter方法是提供给【类外】用来设置【私有话成员变量的方法】 * getter方法是提供给【类外】用来获取【私有话成员变量的数据】 * * 问题B: * 选择使用了封装思想,使用了private权限修饰,也用了setter方法,但是数据还是没有符合生活逻辑。 * 【解决问题】 * 要对setter方法做限制。让代码符合语法逻辑和生活逻辑。 * * 【封装的好处】 * 1.提高了代码的安全性。 * 2.操作数据简单。 * 3.可以隐藏一部分代码。 JAR包 * * 【要求】 所有的类成员变量全部封装,并且按照语法规范和生活逻辑提供对应的setter和getter方法。 * * * */
public void winner() {
System.out.println("winnerwinner");
}
}
public class Demo4 { public static void main (String[] args) {
Person lu = new Person();
lu.setName("lu");
lu.setAge(18);
lu.setSex('M');
System.out.println("Name"+lu.getName()+"Age:"+lu.getAge()+"Sex:"+lu.getSex());
}
}
匿名对象
class Student {
//成员对象
String name;
int id;
int age;
//成员方法
public void Study() {
System.out.println("学习学习");
}
}
public class demo3 {
public static void main(String[] args) {
Student lu = new Student();
lu.name = "lu";
lu.age = 22;
lu.id = 16;
//通过类对象来调用成员方法
lu.Study();
/*通过类对象调用这个方法,调用了很多无用的东西, 而且该对象在调用了这个方法之后就没有了其他作用。 追求极致的方式,一点到底 上面的方式: 第一:创建的对象有且只调用了一种方法 第二:对象在创建之后不会立即回收,浪费资源 java中提供了一种方式,称之为: 匿名对象:没有对象名,不需要赋值号。 格式: new+类名()+.+调用的方法();*/
/*总结: * 1.匿名对象可以简化代码的书写,提高效率。eg.x.x.x.x.x * 2.匿名对象不会使用成员变量,语法没有问题,但是没有实际意义,有去无回。 * 3.匿名对象的使用方式 new 类名().调用的方法()或者成员变量;这种方式才有意义。 * * * 前景预告 * 匿名对象的终极挑战: * 匿名内部类的匿名对象直接调用方法。 * android开发中大量使用。 * 作用范围: * 1.直接通过匿名对象调用成员方法。 * 2.匿名对象作为函数/方法的对象 * eg:文件IO操作 String lien = new BufferInputStream(new FileInputStream(new file(文件地址)).read(); * */
new Student().Study();
new Student().name = "lyb";
}
}