一.overload重载
//方法的重载:同名方法 overload
// 1.同一个类中 2.同一个方法名
// 1.参数的数据类型不同 2.参数的个数不同 3.参数的顺序不同
public class Demo6{
//程序运行
public static void main(String [] args){
//方法的调用 好处:提高代码的复用性
//printJiu(); 实际参数
//double a = add1(10.5,29.6);//调用add方法,他有一个返回值,我们用变量a来接收他
//System.out.println(a);
//add2(10,20);
}
//计算两个数相加(未知:2个数 double)形式参数 ,把结果返回 有返回值有参数
public static double add1(double num1,double num2){
//代码
double result = num1+num2;
return result;//返回结果
}
public static void add2(double num1,double num2){//有参数没有返回值
double result = num1+num2;
System.out.println("输出:"+result);
}
//和主方法并列 没有返回值void 没有返回值,没有参数
public static void printJiu(){
//打印九九乘法 的代码
for(int j = 1;j<=9;j++){//行数
//每一行所做的事情
for(int i = 1;i<=j;i++){
System.out.print(i+"*"+j+"="+(i*j)+" ");
}
System.out.println();
}
//return ; 省略的
}
}
二.重写(Overriding)
(1) 父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。
方法重写又称方法覆盖。
(2)若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
(3)子类函数的访问修饰权限不能少于父类的;
@override
静态的方法一般不涉及重写
参考链接内容
三.super
super调用超类的方法和调用超类的构造器
this的两个用途:引用函数参数;调用该类的其他构造器。
super的两个用途:调用超类的方法;调用超类的构造器。
this();super()这两个调用构造器都要放在第一位
此处注明:java不支持多继承,但是支持多个层次的继承
import java.util.Date;
import java.util.GregorianCalendar;
public class Employee {
private String name;//年龄
private double salary;//工资
private Date hireDate;//租用日期
public Employee(String name,double salary,int year,int mounth,int day)
{
this.name=name;
this.salary=salary;
GregorianCalendar calendar=new GregorianCalendar(year,mounth-1,day);//日期
this.hireDate=calendar.getTime();//获取日期的时间
}
public String getName()
{
return name;
}
public double getsalary()
{
return salary;
}
public Date hireDate()
{
return hireDate;
}
public void raiseSalary(double byPrcent)
{
double rsalary=salary*byPrcent/100;
salary+=rsalary;
}
}
//Manager类
public class Manager extends Employee {
private double bonuse;
public Manager(String name, double salary, int year, int mounth, int day) {
super(name, salary, year, mounth, day);
bonuse=0;
}
public double getsalary()
{
double basesalary=super.getsalary();
return basesalary+=bonuse;
}
public void setBonuse(double bonuse) {
this.bonuse = bonuse;
}
}
//ManagerTest类
public class MangerTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Manager boss=new Manager("carl Cracker", 8000, 1987, 12, 15);
boss.setBonuse(5000);
Employee[] straff=new Employee[3];
straff[0]=boss;
straff[1]=new Employee("Hacker", 5000, 1989, 11, 10);
straff[2]=new Employee("张三", 10000, 1996, 10, 15);
for(Employee e:straff)
{
System.out.println(" "+e.getName()+" "+e.getsalary()+"时间是"+e.hireDate());
}
}
}
四.多态
一个Employee可以引用一个Employee类对象,也可以引用Employee的任何一个子类的对象
子类的对象指向父类的引用
多态:情况下
1.静态属性和非静态属性(调用父类)
2.静态方法(调用父类)和非静态属性(调用子类的)
缺点:多态下只会调用父类具有的。
编译时类型:泛指
运行时类型:具体