Java基础——构造函数、抽象类、父类构造方法初始化

Java基础——构造函数、抽象类、父类构造方法初始化

——小实例快速成长

构造函数:

1.在对象初始化时调用,方法名与类名完全相同;

2.构造函数可写,也可以不写;如果不写,系统将当做写了一个无参构造函数处理;

3.不能写返回值类型;

4.不能使用static修饰符。

5.一个类可以同时存在多个构造函数,这些构造函数之间呈重载关系——即函数名相同,参数类型或参数个数不同。

6.如果类中已写了构造函数,那在对象初始化时,系统将去搜索符合条件的对应构造函数。

7.特注:如果类中已写有参构造函数,没重载无参构造函数。在初始化时,却去调用无参构造函数(如例中的第3句代码),编译将无法通过,报错“实际参数列表和形式参数列表长度不同”。

抽象类(关键字abstract):

1.先继承,再使用;不能直接实例化,通过非抽象类继承后,才能实例化对象。

2.类中含有抽象方法,那这个类需要声明为抽象类。(含有抽象方法的类,必须为抽象类)

3.抽象方法:只声明,不含方法体;

4.在子类中必须实现父类(肯定是抽象类)所有抽象方法。

父类构造方法初始化(关键字super):

1.显示调用父类构造方法——用super();

2.若显示调用,必须将super()方法写在最前面;

3.若不显示调用,则要求父类必须写了‘无参构造函数’,系统会自动调用,否则报错“实际参数列表和形式参数列表长度不同”。

示例代码:

<pre name="code" class="java">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");}}//继承 父类Animalclass 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");}}//继承 父类Animalclass Tiger extends Animal{  public void eat(String food) {this.Name = "东北虎";System.out.println("我的名字叫:" + Name + "; 我以" + food + "为食!\n");}}

运行效果图:

可是我知道结果是惨淡的,但还是心存希望!

Java基础——构造函数、抽象类、父类构造方法初始化

相关文章:

你感兴趣的文章:

标签云: