Java基础——构造函数、抽象类、父类构造方法初始化
2015-03-31 23:44
399 查看
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"); } } //继承 父类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"); } }
运行效果图:
相关文章推荐
- Java基础-构造函数,覆写父类方法,多态及动态绑定,抽象类和Object类的运用
- JAVA基础:子类、父类继承关系 静态块、非静态块、构造函数初始化顺序性、静态非静态方法覆盖
- Java第11次作业:什么是继承?继承的好处?什么是覆写?super()?构造代码块?子父类初始化顺序? 抽象类能用final声明吗?final关键字声明类 方法 变量以及全局常量?抽象类的构造方法?
- java语言基础|关于子类和父类的构造方法
- java基础知识6-- 抽象类,抽象方法,接口,构造方法,类方法等易混淆的知识点
- java基础之为什么java的父类一般(不是必须)要写无参构造方法
- 2018/01/08JAVA 基础 / 接口与继承:[Q]:若父类Hero提供了一个有参的构造方法,但是没有提供无参的构造方法。子类应该怎么处理?
- java基础-显示代码,构造代码块 , 构造函数的初始化顺序
- JAVA基础--重载与重写,接口与抽象类,构造方法的作用,代码块的分类
- C++和JAVA中一些区别,包括指向子类的引用会调用谁的方法,子类构造函数自动调用父类构造函数时,父构造会调用的谁方法
- 黑马程序员_Java基础_面向对象(继承、子父类变量和函数以及构造函数特点、final关键字、抽象类、模版方法模式、接口)
- 2018/01/08JAVA 基础 / 接口与继承/Java关键词:变量引用 super 调用父类对象方法/构造方法【或者访问父类对象属性】的方式归纳
- Jni基础(二) C语言访问Java构造方法,父类方法
- Java 子类初始化父类的构造方法 成员变量不支持多态
- 黑马程序员--java中父类和子类都有构造方法时,子类对象的初始化过程
- java基础-构造方法初始化内存图
- java基础:父类与子类之间变量和方法的调用
- java中 静态成员、实例成员、构造方法在子类和父类中的执行顺序
- java 基础:static 与构造方法
- java基础:父类与子类之间变量和方法的调用