本章我们来进一步来了解一下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。恩,提前讲下,写在这个位置的东西叫做修饰符,它的作用是用来控制参数/方法对外的访问权限的。 |