package com.study1;
public class Exercise2 {
public static void main(String[] args) {
// TODO Auto-generated method stub Pupil stu=new Pupil(); stu.name="小明"; stu.address="风水山"; stu.ayl(300f); //注意:这个用法是类中方法中有一个带参数的不返回值的方法。 System.out.println("姓名: "+stu.name+" 年龄: "+ stu.age+" 住址 : "+stu.address+" 学费: "+stu.fee); Kid k1=new Kid(); k1.name="小丫"; k1.fee=1000f; System.out.println("姓名: "+k1.name+" 学费: "+k1.ayl1()); }}
class Student1
{ public String name; protected int age; protected float fee; String address; public void getName() { System.out.println(name); }}//==通过继承,使类“Pubip”继承了父类“Student”中的类变量和类方法。class Pupil extends Student1{ public void ayl(float fee) //创建了一个不返回值带参数的方法。 { this.fee=fee*0.4f; //System.out.println(this.fee); }}class Kid extends Pupil
{ public float ayl1()//创建了一个不带参数的返回方法。 { return this.fee*0.8f; }}
注意:在类的继承中,父类的构造函数是不能被继承具体如下:
特殊性
构造方法是一种特殊的成员方法,它的特殊性反映在如下几个方面:
1.构造方法作用:(1).构造出来一个类的实例 (2).对构造出来个一个类的实例(对象)初始化。
2.构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有。
3.主要完成对象的初始化工作,构造方法的调用是在创建一个对象时使用new操作进行的。
4.类中必定有构造方法,若不写,系统自动添加无参构造方法。接口不允许被实例化,所以接口中没有构造方法。
5.不能被static、final、synchronized、abstract和native修饰。
6.构造方法在初始化对象时自动执行,一般不能显式地直接调用.当同一个类存在多个构造方法时,java编译系统会自动按照初始化时最后面括号的参数个数以及参数类型来自动一一对应。完成构造函数的调用。
7.构造方法分为两种:无参构造方法 有参构造方法
构造方法可以被 。没有参数的构造方法称为 ,与一般的方法一样,构造方法可以进行任何活动,但是经常将他设计为进行各种初始化活动,比如初始化对象的属性。
8.构造代码块: (1)作用:给对象进行初始化,对象一建立就执行,而且优先于构造函数执行 (2)构造代码块和构造函数的区别: 构造代码块是给所有不同对象的共性进行统一初始化,构造函数是给对应的对象进行初始化
9.子类继承父类中, ***子类的实例化过程 ***构造方法不能被子类继承 ***子类创建对象时,会先去创建父类的对象。 默认是去调用父类的无参构造方法。 ***子类构造方法中,第一行默认是super() ***为什么子类中第一行会默认有super() 因为他继承父类的成员使用,使用前这些成员必须初始化, 而他们是父类的成员,所以,必须通过父类进行初始化。 所以,会先创建一个父类的对象。 **当父类没有无参构造方法时
必须使用this或者super调用其他的构造方法。
10.自定义类中,如果不写构造方法,java系统会默认添加一个无参的构造方法。如果写了一个有参的构造方法,就一定要写无参构造方法。 如果想使用无参的构造方法,就必须手动给出无参构造方法。 建议:一般情况下,我们自定义的类都要手动给出无参构造方法。
案例:
假如说我们给父类设置了构造函数,然后子类继承父类,这样的结果就是报错,无法编译。