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

本文介绍了Java中的构造函数、抽象类及其初始化。构造函数用于对象初始化,可重载,且无返回类型。抽象类不能直接实例化,需由非抽象子类实现其所有抽象方法。父类构造方法可通过`super()`显式调用,系统默认调用无参构造器。文中通过实例代码详细阐述了这些概念。
摘要由CSDN通过智能技术生成

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");

}

}

运行效果图:

test.jsp?url=http%3A%2F%2Fimg.blog.csdn.net%2F20150402202840090%3Fwatermark%2F2%2Ftext%2FaHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3FpbmdibzA4Mjk%3D%2Ffont%2F5a6L5L2T%2Ffontsize%2F400%2Ffill%2FI0JBQkFCMA%3D%3D%2Fdissolve%2F70%2Fgravity%2FCenter&refer=http%3A%2F%2Fblog.csdn.net%2Fwangqingbo0829%2Farticle%2Fdetails%2F44789057

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值