1.构造函数
构造函数的语法格式:
修饰符 + 类名(){
}
构造函数的作用:实例化对象,快速初始化对象
构造函数的特点:
1.如果类中没有构造函数,系统会为每一个类生成一个默认的构造函数
2.如果类中存在带有参数的构造函数,系统就不会为类生成默认的构造函数
此时如果调用 new Cat()(没有传参);时会报错.
解决办法有两个:1.为类添加默认的构造函数
2.new Cat(传参数);
3.构造函数是没有返回值的
如果类中没有构造函数,系统会为每一个类生成一个默认的构造函数
2.继承
继承的语法
A:B 即A类继承自B类
Enemy enemy=new Boss();//父类声明的对象,可以通过子类去构造,子类声明的对象不可以使用父类去构造
Boss boss=(Boss)enemy;//enemy虽然使用了父类声明,但是使用了子类构造 ,所以本质上是一个子类类型的,我们可以强制类型转换成子类类型
Enemy enemy=new Enemy();
Boss boss=(Boss)enemy;//一个对象是什么类型的 主要是看它是通过什么什么构造的,这里enemy是使用了父类的构造函数,所以只有父类中的字段和方法,不能被强制转换成子类
继承的特点:
1.子类会拥有父类所有的公开字段/属性/方法
2.父类不会拥有子类的字段/属性/方法
3.如果子类和父类出现相同的字段/属性/方法,以子类为准
4.子类可以出现在任何父类出现的地方,子类可以替换父类,
父类不能直接替换子类(需要强制转换 s=(Son)f;)
Father f = new Son();
编译时f的类型是Father,运行时f的类型是Son
5.如果子类出现和父类相同的方法名时,如果想隐藏父类方法,
需要在子类方法修饰符后加上new关键字(其实有没有new都行),防止后期程序过大时出现Bug(有待验证). 隐藏方法:
如果使用子类声明对象时,调用隐藏方法会调用子类的 Boss b=new Boss(); b.Move();
如果使用父类声明对象时,就会调用父类中的隐藏方法 Enemy e=new Boss(); e.Move();
6.base关键字代表父类对象
7.一个子类不可以拥有多个父类(父类除了object类)
8.父类可以拥有多个子类
继承中的构造函数特点:
1.如果两个类存在父子关系,那么在实例化子类的时候,首先会调用
父类的无参数构造函数,然后再调用子类的构造函数
2.实例化子类对象的时候,可以指定子类构造函数调用父类中存在的任意构造函数
使用关键字:base()
:base() ----指定子类构造函数调用父类的无参数构造函数
:base(a) ---指定子类构造函数调用父类带有一个参数的构造函数
这里需要注意的是:
我们在实例化子类对象的时候,一定要关注构造函数的特点;
/// 研究继承关系中构造函数的特点:
/// 1.首先会调用父类的构造函数(默认的构造函数也就是没有参数的构造函数),
/// 然后才会调用子类自身的构造函数
/// 2.如果父类重写了带有参数的构造函数后,在实例化子类对象的时候会出现编译
/// 错误.原因是重写了父类构造函数之后,系统不会在再父类自动生成默认的
/// 构造函数.而我们继承关系的构造函数特点是1
/// 3.子类的构造函数是可以指定,其在调用父类构造函数的时候去调用哪个父类构造函数
/// 写法,在构造函数后添加:base()即可.这里需要注意如果指定的父类构造函数带有两个参数
/// 那么base(a,b),以此类推.指定构造函数调用要遵循实参->形参的原则,就是类型相对应
this 与base关键字:
this可以访问当前类中定义的字段属性方法,有没有this都可以访问,有this可以让IDE-VS编译器给出提示,另外当方法的参数与字段重名的时候,使用this可以表明访问的是类中的字段,base可以调用父类*有的方法和字段,有没有base都可以访问,但是有base的话,IDE编译器会给出提示,把所有可以调用的字段和方法罗列出来方便选择
相关文章
- 当子类继承父类,其子类和父类中静态代码块,构造代码块,无参构造之间的输出顺序
- 黑马程序员—继承中构造函数的特点
- C++中多重继承构造函数调用的先后顺序
- java继承关系中静态代码块、代码块、构造方法的执行顺序
- 【Java基础】继承中的代码块和构造方法的执行顺序探索
- C++基础(九)继承与派生——派生类成员的构造函数和析构函数
- C++中派生类会继承基类的那些成员?会继承构造函数和析构函数吗?
- C++程序设计POJ》《WEEK5 继承和派生》《复合关系和继承关系》《基类/派生类同名成员和protected访问范围说明符》《派生类的构造函数》
- 继承:单继承、派生类成员的访问属性、多继承、菱形继承、虚继承,继承中的构造函数与析构函数
- 派生类生成过程——单继承的构造函数和析构函数(2)