本章我们来进一步来了解一下java对象的特性。
我们的java对象有三大特性:
- 封装
- 继承
- 多态
先说封装吧:
- 封装的定义是:隐藏对象的属性和实现细节,仅对外提供公共访问方式
通过上一章节,我们创建的一个对象可以提现这一点,比如我在对象内封装了eat这个方法,在eat方法内对体重做了处理,对外仅仅提供了eat这个方法让别的程序来调用,这点用到的就是封装了。
再说说继承:
- 继承的定义是:从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的功能
我们假设现在有人类,人类有姓名,年龄,性别,身高,体重。人的行为也有个吃。然后我们现在还有个学生类,因为学生也是人,因此学生拥有人类的一切属性和行为,但是学生他又具备了人所不具备的属性,如班级,也具备了人不具备的行为,比如考试。那么,我如果再写个学生类,把人类的东西再拷过来一遍,是不是很麻烦。于是,神奇的java再一次解决了我们所考虑的问题,直接上代码吧:
-首先我们还是那个Person类
- public class Person {
- private String name;//姓名
- private int age;//年龄
- private String gander;//性别
- private int height;//身高
- private int weight;//体重
- public void eat(){
- this.weight += 1;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getGander() {
- return gander;
- }
- public void setGander(String gander) {
- this.gander = gander;
- }
- public int getHeight() {
- return height;
- }
- public void setHeight(int height) {
- this.height = height;
- }
- public int getWeight() {
- return weight;
- }
- public void setWeight(int weight) {
- this.weight = weight;
- }
- }
然后,我们写一个学生类,让它继承(extends)Person类,并且写上我们的班级属性还有考试方法:
- public class Student extends Person {
- private String classes;//班级
- public void test(){
- System.out.println("考试考试考试");
- }
- public String getClasses() {
- return classes;
- }
- public void setClasses(String classes) {
- this.classes = classes;
- }
- public Student(String classes) {
- super();
- this.classes = classes;
- }
- public Student() {
- super();
- }
- }
当我面和创建Person对象一样去创建Student对象时,你会发现,创建出来的student实例不仅有Student的属性和行为,同时还具有Person的属性和行为并且可以直接使用。在这里,Person类叫做Student类的父类,Student类是Person类的子类:所有类的父类都是Object类
最后说多态:
- 多态的定义是:某一类事物具备的多种表现形态
我们的Person这个对象里面的方法只是有个吃,不管吃多少,吃一次体重都是+1,在Student里,我们想让吃这个方法更具体化,我们吃多少体重增加多少:
- public class Student extends Person {
- private String classes;
- public void test(){
- System.out.println("考试考试考试");
- }
- public void eat(int i){
- this.setWeight(this.getWeight()+i);
- }
- public String getClasses() {
- return classes;
- }
- public void setClasses(String classes) {
- this.classes = classes;
- }
- public Student(String classes) {
- super();
- this.classes = classes;
- }
- public Student() {
- super();
- }
- }
- public static void main(String[] args) {
- Student student1 = new Student();
- student1.setName("大妖怪");
- student1.setWeight(10);
- System.out.println(student1.getWeight());
- student1.eat();
- System.out.println(student1.getWeight());
- student1.eat(20);
- System.out.println(student1.getWeight());
- }
当我面再次创建实例的时候:你会发现Student1可以调用的eat()方法有两个,一个是不用传参数的一个需要传参数。 在Sudent那我们那写着“int i”,这个叫做形参(形式参数),而在我们调用的时候传的“20”,这个叫做实参(实际参数),至于形参和实参的区别,哎,懒得写了,百度吧,这就讲得很对:
下章我们会来讲讲为什么我们在有的地方中使用public而有的地方使用private。恩,提前讲下,写在这个位置的东西叫做修饰符,它的作用是用来控制参数/方法对外的访问权限的。