java 从零开始,学习笔记之基础入门<重载_覆盖_继承>(十)(一)

2014-11-24 08:34:27 · 作者: · 浏览: 2
重载_覆盖_继承
方法的覆盖(重写)
子类继承父类的时候,父类里面的方法都被子类所继承(除了私有的方法),如果父类里面的方法不能够满足子类的需求,那么就必须在子类里面对父类的方法进行覆盖,覆盖的同时要满足一下几个条件:
* 子类覆盖父类的方法时,方法的返回值类型和方法名 方法的参数必须要和父类的保持一致
* 子类中覆盖父类的方法,方法的修饰符类型不能够比父类的方法的修饰符类型更严格
Eg :父类中的方法修饰符为protected 的,那么你子类的覆盖该方法的访问修饰符要么是protected 要么是public
* 方法的覆盖 在方法的之前有一个 @Override标识
Eg:父类:
package com.ibm.overrideMethod1;
publicclass Person {
//这是父类
public String read(String book){
return"读的书是"+book;
}
public StringeatEgg(String name,int num){
return name+"吃了"+num+"鸡蛋";
}
}
子类:
package com.ibm.overrideMethod1;
publicclass XiaoBai extends Person {
@Override
public String read(String book) {
return"小白正在"+super.read(book);
}
//在小白这类里面 也可以调用read方法
//父类中的方法就不能满足子类的需求
//对父类里面的方法进行覆盖
publicstaticvoid main(String[] args) {
XiaoBai xb=new XiaoBai();
String ss=xb.read("一千零一夜");
System.out.println(ss);
}
}
结果:小白正在读的书是一千零一夜
总结:子类覆盖了父类中的方法,子类的方法和父类的方法保持一致,只是方法所要做的操作改变,也就是对方法进行改写。
方法的重载(overload)
在一个类中,所有的方法的方法名相同,只是方法的参数列表,返回值类型不同
返回值类型不同,那么你所传的参数的个数也必须不同
返回值类型相同,
1 参数列表的个数不同
public void run(){//汽车run方法
}
//返回值类型要相同
public void run(String name){}
public void run(Stringname,String pass){
}
2 所传参数的类型不同 个数相同
public void run(String name){}
public void run(int i){
}
Eg:publicclass Student {
//打印出学生的信息
publicvoid show(){
System.out.println("这是学生类");
}
public void show(String name){
System.out.println("学生姓名"+name);
}
public void show(String name ,int age){
System.out.println("学生的姓名"+name+"学生年龄"+age);
}
public void show (String name,int age,boolean flag){
if(flag==true){
System.out.println("学生姓名"+name+"年龄"+age+"考试通过");
}else{
System.out.println("学生姓名"+name+"年龄"+age+"考试不通过");
}
}
构造器的重载
构造器的语法:
语法:访问修饰符 + 类名(参数列表){}
一个类中默认的都有一个无参数的构造器
构造器也有含参数的构造器 (参数可以是一个 二个 或者多个)
如果一个类中含有含参数的构造器,那么含参数的构造器是不是会将默认的无参的构造器覆盖,我们调用的就是含参数的构造器
定义参数为不同类型的构造器
在一个类中,我通过构造器对不同类型的值进行初始化?
Eg:
publicclass NewManyObject {
doubled;
longl; //定义四个不同类型的属性
inti;
String s;
//这个是默认的无参的构造器 1
public NewManyObject(){
}
//不同类型的属性进行初始化 2
public NewManyObject(double d){
this.d=d;
System.out.println(this.d);
}
//3
public NewManyObject(long l){
this.l=l;
}
//4
public NewManyObject(int i){
this.i=i;
}
//5
public NewManyObject(String s){
this.s=s;
}
publicstaticvoid main(String[] args) {
//给double型属性初始化 2号构造器
NewManyObject mo=newNewManyObject(12.5d);
}
}
总结:
构造器的重载,只是在构造器中所传的参数的类型和参数的个数不同,构造器名一样都是类名保持一致。你创建对象的时候呢,要对什么属性进行初始化,就调用对应的构造器
构造器调用构造器: 通过this关键字来调用对应的构造器
publicclass NewManyObject01 {
private String name;
private String pass;
private String age;
private String tel;
// 传一个参数的构造器,对name属性进行初始化 1
public NewManyObje