<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">一、构造器</span>
JAVA中的构造器与C++中的构造函数类似。
构造器是一个系统默认的方法,主要用于构造对象与初始化该对象属性。
定义格式:public类名(){}
例如一个学生类:
public class Student {
public String name;
public int age;
public void Student(){}
}
构造方法的一般操作与其他方法类似
二、当我们需要用到同名的方法去解决相关问题时,就需要用到方法的重载。
重载时,必须满足在同一个类中,多个方法的方法名相同,参数不同(类型、个数、顺序)
例如:
public class Teacher {
String name;
public Teacher(){
System.out.println("1");
}
public Teacher(String n){
name = n;
}
public void teach(int a){
System.out.println("参数是整数");
}
public void teach(){
System.out.println("参数是空");
}
public void teach(String n){
System.out.println("参数是字符串");
}
public void teach(String n,int a){
System.out.println("参数是字符串+整数");
}
public void teach(int a,String n){
System.out.println("参数是整数+字符串");
}
}
进行相关调用时根据对应的参数不同进行调用。
三、继承
当一个类的方法与另一个类的非私有方法一致时,可使用类的继承。
继承可以减少不必要的程序语句冗余
当多个类存在继承与被继承关系时,统一修改类的方法便简化了
格式:public class 子类名 extends 父类名{}
例如大学生类继承学生类:
学生类:
public class Student {
public String name;
public int age;
public void study(){
System.out.println("学习");
}
private void Number(){
System.out.println(“学号”);
}
}
大学生类:
public class UnStudent extends Student{}
此时大学生类中便存在字符串name、整数age和方法study;但是不存在方法Number。
四、方法重写
条件:当子类继承父类时,父类中的可继承方法可以在子类中重写
格式:
方法名、参数、返回类型一致
作用:当普通类继承接口、普通类继承抽象类中的抽象方法、部分抽象类继承接口时需要用到方法的重写
例如大学生类继承学生类:
学生类:
public class Student {
public String name;
public int age;
public void study(){
System.out.println("学习");
}
private void Number(){
System.out.println(“学号”);
}
}
大学生类:
public class UnStudent extends Student{
public void study(){
System.out.println("大学生学习");
}
}
注意:父类中的构造方法不会在子类中被继承,也不能被重写;重写和重载相同点在于方法名相同;
此时大学生类中便存在字符串name、整数age,并重写了方法study;但是不存在方法Number。
五、自动转型
条件:创建子类的对象并赋值给父类类型的对象
格式:父类类名 对象名 = new 子类类名();
注意:自动转型后的对象类型为转型后的类型,对象能调用的方法中如果是子类重写了父类的方法则调用重写后的方法,如果是非重写的方法则只能调用父类中的方法
例如大学生学生类继承学生类:
学生类:
public class Student {
public String name;
public int age;
public void study(){
System.out.println("学生学习");
}
}
大学生类:
public class UnStudent extends Student{
public void study(){
System.out.println("大学生的学习方法");
}
public void playGame(){
System.out.println("大学生玩dota");
}
}
Test类进行测试:
public class Test {
public static void main(String[] args) {
//自动转型
UnStudent us = new UnStudent();
Student us1 = new UnStudent();
Student us2 = new Student();
us.study();
us1.study();
us2.study();
us.playGame();
//us1.playGame(); 代码不能通过编译
//us2.playGame(); 代码不能通过编译
}
}
在输出的结果中显示:
大学生的学习方法
大学生的学习方法
学生学习
大学生玩dota
因为us1与us2都是Student类类型的对象,所以不能够调用子类中的特有的方法
六、多态
在自动转型中提到,同为Student类类型的对象,同时调用study()方法,却存在不同的行为,这就是JAVA的多态性
多态的原因:继承+方法重写+自动转型
七、方法分类(构造方法、普通方法、抽象方法)
构造方法: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)
类似于上下级的关系,接口就是项目经理提出的项目功能()方法;抽象类就是个项目小组的组长,能实现一些具体方法,剩下的方法交给下层去做;普通类就是程序员需要去具体实现一个个方法。
九、接口的继承
单独拿出来是因为区别于继承的关键字extends
继承接口的关键字是implements(实现)
格式:
public 子类类型 子类类名 implements 接口名{
//当子类类型为普通类型时必须重写接口中所有的抽象方法
//因为普通类型中不能存在抽象方法
}
例如:
教师接口:
public interface Teacher {
public static final String name = "张华";
public static final String job = "教师";
public static final int age = 20;
//抽象方法
public abstract void teach();
}
大学教师类继承教师接口:
public class UnTeacher implements Teacher{
//重写teach类
public void teach(){}
}