类
类定义了抽象数据类型,所谓抽象数据类型就是将不同的数据类型集合组成的一个整体,因为不能使用某一种特定的数据类型来表达,所以需要通过其他的数据类型的组合来存储数据。类其实是某一类事物的共同点,所以类=成员变量(抽象数据类型)+方法。
成员变量
成员变量其实就是多个变量,用来描述类的属性。比如狗有种类和颜色等等。
方法
成员变量是对类的操作,也就是一种行为。
类的定义
类里包括了成员变量和方法,在定义类时先使用class关键字,然后加上类的名称。
class Student{
int age;
double score;
double getScore(){
return score;
}
}
构造方法
- 构造方法是用来初始化数据(成员实例变量)的,创建对象后自动调用。语法结构如下:
[访问修饰符] 类名([参数1,参数2,...,参数n]){
//构造方法体
}
class Student{
[public] Student(){
方法体;
}
}
- 构造方法的使用,当我们没有定义构造函数时,编译器会自动添加一个无参的构造函数(默认构造函数),但是当自己定义了构造方法后,则编译器就不会再创建构造函数了
class Student{
String name;
int age;
Student(String name1,int age1){
name = name1;
age = age1;
}
}
Student student = new Student("张三",24);
Student other = new Student();//编译错误,需要传参数
- 可以对构造函数进行重载,使用this关键字可以调用构造方法,代码如下:
public Student(String name,int age){
this.name = name;
this.age = age;
}
//重载,使用this()代表调用构造方法
public Student(){
this("张三",2);
}
this关键字的使用
this关键字指向当前对象,通常在成员变量和形参有歧义的时候使用,如下:
class Student{
String name;
int age;
Student(String name,int age){
this.name = name;
this.age = age;
}
}
继承
继承是为了代码的复用性,当多个类有共同的属性或方法时,可以将其取出组成一个新的类,其他类可以通过extends关键字继承,则在其他类中不用再写相同的代码。如下,老师和学生拥有共有的属性和方法,所以抽象成一个超类,学生和老师也有自己特有的属性和行为,则在其类中扩展。
class Person{
String name;
int age;
void say(){
System.out.println("我叫"+name+",今年"+age+"岁了");
}
}
//继承
class Student extends Person{
String stuId;
void study(){
...
}
}
class Teacher extends Person{
double salary;
void teach(){
...
}
}
超类
超类是派生类所共有的属性和行为的集合。一个超类可以有多个派生类。
派生类
派生类是继承超类的类,具有超类的所有属性和行为,还包括有自己特有的属性和行为。派生类只能继承一个超类。
tips
- 继承具有传递性,即A继承B,B继承C,则A有B和C所有的行为和属性
- 当创建派生类时,会调用派生类的构造方法,如果派生类的构造方法中没有调用超类的构造方法则会自动调用超类的无参构造方法,所以要注意超类的构造方法是否有参数,如果有参数则需要在派生类中使用super(参数1,参数2,…,参数n)调用超类的构造方法。
引用类型指向
当两个引用指向同一个对象时,如果其中一个改变了对象成员变量的值,则另一个相应的也会进行相应的改变。
Student a = new Studnet();
Student b = a;
a.name = "wang";
System.out.println(b.name);
//结果为wang