初学java--重载,重写和继承

来源:互联网 发布:好听的淘宝女店铺名称 编辑:程序博客网 时间:2024/05/21 22:51

方法重载,指同一个类中多个方法(与返回值,访问修饰符无关):
方法名相同
参数列表不同

构造函数重载

方法重写的规则
在继承关系的子类中
重写的访问修饰符不能比父类的访问修饰符更严格(例如。父类是默认,则重写则可以使默认、protect和public)
重写的方法名、参数、返回值类型必须与父类相同
私有方法不能继承因而也无法重写

方法重写vs方法重载
 位置方法名参数表返回值访问修饰符方法重写子类相同相同相同不能比父类更严格方法重载同类相同不同无关无关

继承
编写父类
class Father{
//公共的属性和方法
}
编写子类,继承父类,子类只能继承一个父类
class Sonextends(extends为继承关键字) Father{
//子类特有的属性和方法
}


一个类创建对象时的初始化顺序:属性 --> 代码块(初始化 )--> 构造,
有继承关系后,先有父类,再有子类:父类属性-->父类构造方法-->子类属性-->子类构造方法


有些父类成员不能继承
1.子类不能访问父类private成员
2.子类 与父类不在同包,使用默认访问权限(不添加访问修饰符即为默认访问权限)
3.构造方法(父类的构造在子类中一定要被调用)

此处为继承和重写的代码实例:
package com.jredu.jicheng;/** * 工程师类(父类) * @author Hello * */public class Engineer {//此为父类,其子类可以继承protected int id;protected String name;protected String entertime;public Engineer(int id, String name, String entertime) {super();this.id = id;this.name = name;this.entertime = entertime;}public void showInfo(){System.out.println("编号:"+id+",姓名"+name+",入职时间"+entertime);}}

package com.jredu.jicheng;/** * 软件工程师,继承工程师类(子类) * @author Hello * */public class SoftEngineer extends Engineer {//此为子类,独有属性方法private String type;//语言类型public SoftEngineer(int id, String name, String entertime,String type) {super(id, name, entertime);// TODO Auto-generated constructor stubthis.type=type;}@Override//重写public void showInfo() {// TODO Auto-generated method stubsuper.showInfo();System.out.println("语言类型:"+type);}public void coding(){System.out.println("正在编程");}}

package com.jredu.jicheng;/** * 测试工程师(子类) * @author Hello * */public class TestEngineer extends Engineer {private String level;public TestEngineer(int id, String name, String entertime,String level) {super(id, name, entertime);//使用super可以调用父类的属性,否则无法调用父类属性// TODO Auto-generated constructor stubthis.level=level;}public void test(){System.out.println("开始测试");}}

package com.jredu.jicheng;/** * 测试类 * @author Hello * */public class Test {public static void main(String[] args) {//调用父类中的定义的方法结果//如果子类没有重写父类的方法,调用的就是父类的实现//如果子类重写了父类的方法,调用的就是子类中的实现SoftEngineer soft=new SoftEngineer(1, "张三", "15-08-09", "java工程师");soft.showInfo();soft.coding();TestEngineer test=new TestEngineer(2, "李四", "11-01-01", "高级测试工程师");test.showInfo();test.test();}}