目录
1.构造函数
1.1 构造函数的定义
构造函数名与所在类的类名相同,无返回值(如:void、int等),可以带参数。
private String name;
private int age;
private String sex;
//无参构造函数
public Person(){}
//带参构造函数
public Person(String name,int age){
this.name = name;
this.age = age;
}
1.2 构造函数的重载
构造函数可以像方法一样,有函数的重载,因为构造函数的方法名必须跟类名相同,因此,构造函数的重载可以通过带参或者不带参以及参数的个数来实现方法的重载。
private String name;
private int age;
private String sex;
//无参构造函数
public Person(){}
//带参构造函数
public Person(String name,int age){
this.name = name;
this.age = age;
}
public Person(String name,int age,String sex){
this.name = name;
this.age = age;
this.sex = sex;
}
1.3 构造函数的使用
在对象实例化时,如果没有定义构造函数,默认构造函数为不带参数的,如果定义了带参的构造函数,实例化时,应赋予实参,并且参数的个数、位置应该一致,不然会编译报错;同时定义带参构造函数和不带参构造函数,对象实例化时,可以使用无参的,也可以使用带参的。
public class Test {
public static void main(String[] args) {
Person p = new Person();
Person p1 = new Person("张三");
Person p2 = new Person("张三",18);
Person p3 = new Person("张三",20,"男");
}
}
2.类的继承
2.1 定义
继承就是子类继承父类的特征和行为,使子类对象具有父类的实例域和方法,类的继承是单继承,但可以是多层继承的。
2.2 抽象类的继承
(1)定义
抽象类的继承,用关键词abstract定义类,类中可包含普通方法和抽象方法,抽象方法无方法体,抽象方法由子类继承并重写来实现。
(2)特点
①抽象类不能被实例化,只能被继承,但只能单一继承;
public abstract class Person {
public void run(){
System.out.println("跑得快");
}
}
public class Test {
public static void main(String[] args) {
Person person = new Person();
}
}
②包含抽象方法的一定是抽象类,但抽象类不一定包含抽象方法;
public abstract class Person {
//普通方法
public void run(){
System.out.println("跑得快");
}
}
③抽象类中的抽象方法的访问修饰符只能为public或protected,默认为public;
④子类继承抽象父类,必须重写父类抽象方法,否则子类要声明为抽象类;
public class Student extends Person{
@Override
public void run() {
}
}
//或者
public abstract class Student extends Person{
}
⑤抽象类可以包含属性、方法、构造方法,但构造方法不能用于实例化,主要用途是被子类调用。
3.接口的实现
3.1 定义
Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征,没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
3.2 特点
(1)Java接口中的成员变量默认都是public,static,final类型的(可省略),接口中的成员变量为常量;
public interface Eat {
public static final int age=18;
}
(2)Java接口中的方法默认都是public,abstract类型(可省略),没有方法体;
public interface Eat {
public abstract void eatMeat();
}
(3)接口中没有构造方法,不能被实例化;
public interface Eat extends Run,Play{
public abstract void eatMeat();
//接口中定义构造函数报错
public Eat();
}
(4)接口之间不能实现,但可以继承多个接口,类可以实现多个接口;
public interface Eat extends Run,Play{
public abstract void eatMeat();
}
(5)接口必须通过类来实现它的抽象方法;
(6)类实现某个接口,必须实现接口中的所有从抽象方法,否则这个类必须声明为抽象类。
public class Student implements Eat{
@Override
public void eatMeat() {
}
}
//或者
public abstract class Student implements Eat{
}
4.接口的实现与抽象类的继承的区别
4.1 相同点
(1)都包含抽象方法,抽象方法没有方法体,都通过别的类来实现;
(2)都不能被实例化;
(3)都必须实现所有抽象方法,否则子类需要声明为抽象类。
4.2 不同点
(1)接口中的变量必须为常量,抽象类中的变量可为普通变量或者常量;
(2)接口中只能包含抽象方法,抽象类中可以有普通方法和抽象方法,也可以不包含抽象方法;
(3)接口中不能有构造函数,抽象类中可以包含构造函数;
(4)抽象类只能被单继承,接口可以多继承、多实现。
5.建议采纳
如有建议或者错误请私信我进行修改,感谢!!!