引言:学习Java差不多一年过去了,还在上学期间,有时候,写JSP或是Android的时候,突然会被一个冷不丁的Java面向对象的一个小特征回忆的不是太清楚而烦恼,晚上,翻看了以前的Java书籍,看了面向对象,将一些冷不丁的,在写代码中容易忽视的“条例”列了下来。
一:方法的重载:
- 发生在同一个类中
- 方法名,也就是方法的标识必须相同
- 形参列表一定不同
- 注意:返回值不能决定方法的重载
二:方法的重写:
- 方法重写需要与上面总结的方法重载区别开
- 方法重写,重写的是什么? 重写的是父类方法
- 要求:方法名一定相同、形参必须一样,重写的方法和父类被重写的方法的类别必须一样(要么都是类方法,要么都是实例方法)
三:变量的分类: 下面看一个我用UML画的图,有点丑,笔记不是文员啊,讲究看吧:
说明:
- 实例变量是在改类创建对象之后,才被创建起来,而类变量不需要new(即在创建对象之前)就可以使用了。
- 局部变量的优先级高于成员变量,因此,想要在重名的情况下使用成员变量,则可以使用this的关键字(this关键字不能用在有static修饰的方法中),以确保使用的是成员变量。(这也可以理解为是变量的重载)。
四:关于数据的封装:
知道这回事情的人分为两种:第一:刚刚学习Java的人,只是知道有这么一回事情,但不是很能理解Java中存在数据封装的这一含义是为什么(我当时也一样)。 但当你写过一定的代码之后,才会理解,封装的意义,我就把我这一二讲讲:数据封装,经常性的和集合类进行连用,当你有一些数据比如,学生的学号,学生的姓名,学生的成绩,这三个属性作为一个学生的属性的话,那么可以写一个数据封装,把这三个属性,作为成员变量,下面使用getter、setter方法,对这些数据进行封装,那么下面只要创建一个封装类的对象,就相当于创建了一个学生,看代码:
public class student{
private int id;
private String name;
private double point;
public student{};
public student(int id,String name,double point){
this.id=id;
this.name=name;
this.point=point;
}
//下面只要生成默认的getter、setter方法即可
}
public class Crete{
public static void main(String[] args){
Student s1=new Student(1,"张三",95.0);
Student s2=new Student(1,"张三",91.0);
Student s3=new Student(1,"张三",92.0);
Student s4=new Student(1,"张三",99.0);
}
}
[点击并拖拽以移动]
解释:首先创建一个数据封装的类,类有三个成员变量:id , name , point。这三个属性作为一个学生类的属性。
在Create类中,分别创建了4个封装类的对象,就相当于你创建了四个学生,下面的工作,只要对这个这个学生进行操作即可。
五:构造器:
- 每一个类在创建对象的时候,会默认有一个构造器,调用构造器的关键字是“new”来调用构造方法
- 如果一个类没有构造方法,则创建对象会自动生成一个无参的构造方法
- 如果你想在类的实例化中对,类中的相关成员变量赋值,那么你就得自己造一个含参的构造器对其赋值了,就像上面贴出的代码(Student类)
六:super关键字:
- super和this一样,不能出现在有static修饰的方法中
- super和this相反,super是调用父类中被覆盖的方法或者是成员变量
- super可以在子类的构造器中,调用父类的构造器
package njcc.zcy;
public class Sp2 {
public static void main(String[] args){
Sp3 b=new Sp1(1,"张三","红色");
//输出:1===张三
System.out.println(b.id+"==="+b.name);
//如果没有Sp1中的super调用父类构造方法的话,那么,打印出来的则是0===null,为什么是0,
//因为,在当被创建对象的时候,成员变量在没有被赋值的情况下就像数组一样,默认填充为0。
}
}
class Sp1 extends Sp3{
int id;
String name;
String color;
public Sp1(int id, String name,String color) {
super(id, name);
this.color=color;
}
}
class Sp3{
int id;
String name;
public Sp3(){}
public Sp3(int id,String name){
this.id=id;
this.name=name;
}
}
不早了,上面的简单概念的面向对象中一些特征还有很多,比如多态,接口,抽象类等等