Java 基础 —— 构造函数、抽象类、父类构造方法初始化 ——小实例快速成长 构造函数: 1. 在对象初始化时调用,方法名与类名完全相同; 2. 构造函数可写,也可以不写;如果不写,系统将当做写了一个无参构造函数处理; 3. 不能写返回类型; 4. 不能使用 sta
Java基础——构造函数、抽象类、父类构造方法初始化
——小实例快速成长
构造函数:
1.在对象初始化时调用,方法名与类名完全相同;
2.构造函数可写,也可以不写;如果不写,系统将当做写了一个无参构造函数处理;
3.不能写返回值类型;
4.不能使用static修饰符。
5.一个类可以同时存在多个构造函数,这些构造函数之间呈重载关系——即函数名相同,参数类型或参数个数不同。
6.如果类中已写了构造函数,那在对象初始化时,系统将去搜索符合条件的对应构造函数。
7.特注:如果类中已写有参构造函数,没重载无参构造函数。在初始化时,却去调用无参构造函数(如例中的第3句代码),编译将无法通过,报错“实际参数列表和形式参数列表长度不同”。
抽象类(关键字abstract):
1.先继承,再使用;不能直接实例化,通过非抽象类继承后,才能实例化对象。
2.类中含有抽象方法,那这个类需要声明为抽象类。(含有抽象方法的类,必须为抽象类)
3.抽象方法:只声明,不含方法体;
4.在子类中必须实现父类(肯定是抽象类)所有抽象方法。
父类构造方法初始化(关键字super):
1.显示调用父类构造方法——用super();
2.若显示调用,必须将super()方法写在最前面;
3.若不显示调用,则要求父类必须写了‘无参构造函数’,系统会自动调用,否则报错“实际参数列表和形式参数列表长度不同”。
示例代码:
public class TestBase
{
public static void main(String[] args)
{
//Cat cat1 = new Cat(); //提示“实际参数列表和形式参数列表长度不同”的错误
Cat cat2 = new Cat("波斯");
Wolf wolf1 = new Wolf();
Wolf wolf2 = new Wolf("蒙古狼");
Tiger tiger = new Tiger();
tiger.eat("肉");
}
}
//抽象类
abstract class Animal
{
String Food;
protected String Name;
//无参构造函数
public Animal(){
System.out.println("父类 无参构造方法!\n");
}
//有参构造函数
public Animal(String name){
this.Name = name;
System.out.println(Name + "的 父类 有参构造方法!\n");
}
//抽象方法
abstract void eat(String food);
}
//继承 父类Animal
class Cat extends Animal
{
//有参构造函数
public Cat(String name){
//初始化父类构造方法
super(name);
System.out.println("子类Cat有参构造函数!\n");
}
public void eat(String food) {
//成员变量Food继承自父类——protected成员变量
this.Food = food;
System.out.println("猫以"+food+"为食!\n");
}
}
//继承 父类Animal
class Wolf extends Animal
{
//无参构造方法
public Wolf(){
//非显示调用父类构造方法,当程序使用本无参构造方法是,系统将自动调用父类无参构造方法
//检验————无参构造函数调用的时机
System.out.println("调用了Wolf类的无参构造方法!\n");
}
public Wolf(String name){
//非显示调用父类构造方法,当程序使用本有参构造方法是,系统将自动调用父类无参构造方法
//成员变量Name继承自父类——public成员变量
this.Name = name;
System.out.println("子类Wolf有参构造函数!\n");
}
public void eat(String food) {
//成员变量Food继承自父类——protected成员变量
this.Food = food;
System.out.println("狼以"+food+"为食!\n");
}
}
//继承 父类Animal
class Tiger extends Animal
{
public void eat(String food) {
this.Name = "东北虎";
System.out.println("我的名字叫:" + Name + "; 我以" + food + "为食!\n");
}
}
运行效果图: