封装、继承、多态
封装:告诉我们,如何正确设计对象的属性和方法。
封装的原则:对象代表什么,就得封装对应数据,并提供数据对应的行为。
设计一个:人对象,要求这个对象有:名称,年龄,吃饭,睡觉;
public class People{名称年龄吃饭睡觉
}
人画⚪
请针对这个需要面向对象设计
分析:
1.涉及到两个对象:人、圆;
2.需求是人画圆,这属于一种行为,因此需要在圆对象里封装画圆的数据以及画圆的行为方法,提供给人使用,完成人画圆;
3.圆对象的成员变量:圆半径;成员方法:画圆。
实现:
需求三:
人关门
请针对这个需求面向对象设计
分析:
如果以上还不能理解的话,那就再举一个例子:
需求:张三砍死了李四
请根据这个需求面向对象设计:
就问张三砍死了李四,是张三死亡,还是李四死亡?
答:肯定是李四死亡。
那么死亡的方法是定义在张三,还是定义在李四?
答:肯定是定义在李四。
那么用程序员的思想怎么理解这个杀人案件?
答:是张三 调用了 李四的死亡方法,致使李四死亡。
sum公司在开发Java编程语言的时候,已经写了各种各样的对象,这些对象,方便我们程序员用来解决实际开发中的业务问题
举个例子:sum公司知道对字符串的操作是很常见的,所以,就给我们程序员提供了一个代表字符串的对象
拥有操作字符串的很多方法
有啥事?找对象,调用方法就行,传参数就行,编程变得很简单。
降低我们的学习成本,可以少学、少记一点,用的时候,看一下文档就好了。
一般建议对成员变量使用private(私有、隐藏)关键字修饰进(private修饰的成员只能在当前类中访问)。
这种写法,在实际开发中,非常的不好,不推荐使用
使用private关键字修饰的成员只能在当前类中访问
就好比,你现实中刚认识一个妹子,她不可能一下子就给你暴露她的年龄或者隐私吧!
合理暴露:为每个成员变量提供配套public修饰的getter、setter方法,暴露其取值和赋值。
像这样,通过getAge方法给我们取值;通过setAge方法给我们赋值,并且对所赋值进行一些合法判断。
需求:录入学生年龄并判断年龄是否正常
学生类
package Test;public class Student {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {if (age >=0 && age <= 200){this.age = age;}else {System.out.println(this.name + "的年龄不正常!!!");}}
}
实现类
public class StudentTest {public static void main(String[] args) {Student stu1 = new Student();stu1.setName("黑猫警长");stu1.setAge(15);System.out.println(stu1.getName()+"的年龄是"+stu1.getAge());System.out.println("-----------------");Student stu2 = new Student();stu2.setName("一只耳");stu2.setAge(-14);System.out.println(stu2.getName()+"的年龄是"+stu2.getAge());}
}
控制台输出结果:
可以看到,黑猫警长的年龄经过setAge方法的判断是正常范围,所以可以正常赋值,输出是赋值后的数据
一只耳的年龄经过setAge方法的判断不是正常范围,所以不可以进行赋值,输出的是默认值
1、如何进行更好的封装?