一、对构造器的理解
构造器的作用
1、构造对象:方法名跟类名相同,创建一个对象去连接内存里堆的地址找到属性跟方法并调用。构造器的定义格式:public 类名(){}
public class Teacher{
String name;
public Teacher(){
System.out.println("执行了老师的构造方法");
}
}
2、初始化对象
publicclass Test{
publicstaticvoid main(String[] args) {
//创建对象,调用构造方法
Teacher tea = new Teacher("");
Teacher tea1 = new Teacher();
tea.name = "张三";
tea1.name = "李四";
tea = tea1;
tea1.name = "王五";
System.out.println(tea.name);
System.out.println(tea1.name);
}
}
栈存储变量,堆存储对象,都有相应的内存地址。
tea通过调用老师类的构造器找到了它的名字属性“张三”。
tea1也通过调用构造器找到了它的名字属性“李四”。
执行“tea=tea1" tea的属性所在的内存里堆的地址被tea1的地址所替代,所以tea就找到了tea1的地址获取了tea1的属性,所以此时打印输出的是两个“李四”。
tea1的属性有了一个的新的地址,tea又会去找tea1的新地址,此时输出两个“王五”。
二、方法重载
同一个类中,多个方法的方法名相同,参数不同(类型、个数、顺序)的方法互为重载方法
作用:给同一个行为提供不同的执行过程
构造方法也可以重载
public Teacher(){
System.out.println("执行了老师类的构造方法");
}
public Teacher(String n){
name = n;
public void teach(int a){
System.out.println("执行教学方法1");
}
public void teach(){
System.out.println("执行教学方法2");
}
public void teach(String n){
System.out.println("执行教学方法3");
}
public void teach(String n,int a){
System.out.println("执行教学方法4");
}
public void teach(int a,String n){
System.out.println("执行教学方法5");
}
}
由于方法参数相同最后打印的是:执行教学方法3
三、类继承
子类继承父类的所有的非私有属性和方法
格式 : public class 子类名 extends 父类名{}
创建一个学生类,它的属性跟方法都可以被继承
public class Student {
public String name;
public int age;
public void study(){
System.out.println("学生学习");
}
}
MiddleSutudent子类可以从父类Student继承它的名字,年龄等属性和study方法
public class MiddleStudent extends Student{
}
四、方法重写
子类继承父类的前提,然后子类定义一个和父类相同的(方法名,参数,返回类型)方法
区别于方法重载
构造函数是不能被继承的
五、自动转型
定义:创建子类的对象,然后自动转型为父类的类型
格式:父类类名 对象名 = new 子类类名();
六、多态性
体现:多个同一种类型的对象,执行同一个方法,执行的过程不一样(有区别)
为什么会有多态现象???自动转型+方法重写
自动转型+方法重写前提 继承
七.方法分类(构造方法、普通方法、抽象方法)
构造方法:public 类名(){}
普通方法:public 返回类型 方法名(参数){}
抽象方法:public abstract 返回类型 方法名(参数);
八.类的分类(普通类、抽象类、接口)
普通类:public class 类名{}
1.只能有普通方法和构造方法,一定不能有抽象方法
2.可以创建对象
3.属性可以是常量(static final),也可以是变量
抽象类:public abstract class 类名{}
1.三种类型的方法都可以存在
2.不能创建对象
3.属性可以是常量(static final),也可以是变量
接口:public interface 类名(){}
1.只能有抽象方法,普通方法和构造方法不存在
2.不能创建对象
3.属性一定是常量(static final)
九.接口继承
接口和抽象类的作用是用来当父类被继承的,抽象方法是用来指导子类重写(实现)的
关键子:implements
格式:public class 子类类名 implements 接口名{
//重写父类的所有的抽象方法
}
接口无非就是领导,只是指导开发