面向对象基础七

 

七、
重载与覆写的区别:

 
重载
覆写
概念
方法名称相同,参数的类型或个数不同
方法名称、访问权限[最好]、参数的类型个数一样
范围
是发生在同一个类
是发生在继承关系中,子类实现的

 
Super 关键字:在子类对象实例化时在子类的构造方法中,默认隐含了一个super()的代码。调用父类中的构造方法。
子类调用父类中的方法
1、 调用父类中的特定构造方法 super()
2、 调用父类中被覆盖的方法 super.方法()
 
class A
{
       private String name;
       private int age;
       public A()
       {
              System.out.println("1、A ---> public A(){}");
       }
       public A(String name)
       {
              System.out.println("2、A ---> public A(String name){}");
       }
       public A(String name ,int age)
       {
              System.out.println("3、A ---> public A(String name,int age){}");
       }
      
}
 
class B extends A
{
       private String school;
       public B(String name ,int age,String school)
       {
              super(name,age);
       }
}
 
public class javaoo02
{
       public static void main(String srgs[])
       {
              new B("xtadg", 30, "www.mldn.cn");
       }
}
 
A ---> public A(String name,int age){}
 
 
Super 关键字:在子类对象实例化时在子类的构造方法中,默认隐含了一个 super() 的代码。调用父类中的构造方法。
子类调用父类中的方法
3、  调用父类中的特定构造方法 super()
4、  调用父类中被覆盖的方法 super. 方法 ()
 
class A
{
       public String say()
       {
              return "hello ";
       }
}
 
class B extends A
{
       public String say()
       {
              return super.say() + " world!!";
              //return say() + “world”; 一直调用本类的方法,死循环。
       }
}
 
public class javaoo02
{
       public static void main(String args[])
       {
              System.out.println(new B().say());
       }
}
 
hello world!!
 
 
 
class A
{
       String name = "LXH";
       public A()
       {
              System.out.println("XXXX");
       }
       public String say()
       {
              return "hello";
       }
}
 
class B extends A
{
       String name = "MLDN";
       public B()
       {
              super();
              System.out.println("HELLO");
       }
       public String say()
       {
              return super.say() + " world!! ---> " + super.name;
       }
}
 
 
public class javaoo02
{
       public static void main(String args[])
       {
              System.out.println(new B().say());
       }
}
 
XXXX
HELLO
hello world!! ---> LXH
 
class Person
{
       //先设计好一个完整的Perosn类
       private String name;
       private int age;
 
       public Person(String name, int age)
       {
              this.setName(name);
              this.setAge(age);
       }
 
       public void setName(String name)
       {
              this.name = name;
       }
       public void setAge(int age)
       {
              this.age = age;
       }
       public String getName()
       {
              return this.name;
       }
       public int getAge()
       {
              return this.age;
       }
       public String say()
       {
              return "姓名:" + this.name + ",年龄:" + this.age;
       }
}
 
class Student extends Person
{
       private String school;
       public Student(String name, int age, String school)
       {
              super(name , age);
              this.setSchool(school);
       }
       public void setSchool(String school)
       {
              this.school = school;
       }
       public String getSchool()
       {
              return this.school;
       }
       public String say()
       {
              return super.say() + ",学校:" + this.school;
       }
}
 
public class javaoo02
{
       public static void main(String args[])
       {
              Student s = new Student ("张三", 30 , "MLDN 人才培养基地");
              System.out.println(s.say());
       }
 
}
 
 
姓名:张三 , 年龄: 30, 学校: MLDN 人才培养基地
 
 
 
//为了代码的简单,程序暂时不封装
class Employee
{
       String name;
       int age;
       float salary;
       // 表示一个雇员有一个领导
       Manager mgr = null;
       public Employee (String name, int age, float salary)
       {
              this.name = name;
              this.age = age;
              this.salary = salary;
       }
       public String say()
       {
              return "姓名;" + this.name + ",年龄:" + this.age + ",薪水:" + this.salary;
       }
}
 
class Manager extends Employee
{
       //管理人员数
       int number;
       public Manager(String name,int age,float salary ,int number)
       {
              super(name,age,salary);
              this.number = number;
       }
       public String say()
       {
              return super.say() + ",管理人员数;" + this.number;
       }
}
 
public class javaoo02
{
       public static void main(String args[])
       {
              Employee e = new Employee("李四",20,15000);
              Manager m = new Manager("张三",30,3000,5);
              //m e 的领导
              e.mgr = m;
              System.out.println("雇员信息:" + e.say());
              // 为了防止 mgr 的内容为空,如果为空则肯定出现 nullPointerException
              if (e.mgr != null)
              {
                     System.out.println(" 经理信息: " + e.mgr.say());
              }
       }
}
 
//雇员信息:姓名;李四,年龄:20,薪水:15000.0
//经理信息:姓名;张三,年龄:30,薪水:3000.0,管理人员数;5
 
 
可以通过super(),里面的根据传入参数去调用父类中指定的构造方法,默认情况下调用的是无参构造方法。
通过super().方法,可以由子类去调用父类中指定的方法(方法被覆写了)
属性也可以被覆写
 
This 和 super 的区别:
This 和 super在使用上很相似,都可以调用其他方法,其他属性,构造方法[都必须在首行]
This 和 super 调用的构造的操作能同时在一个构造方法中出现吗?this调用构造肯定要留有一个出口

 
This
Super
使用范围
调用本类中的方法或属性
从子类中调用父类的方法或属性
调用属性
This .本类属性,从本类中查找
Super .父类属性,从父类中查找
调用方法
This.本类方法(),从本类中查找
Super.父类方法(),从父类中查找
调用构造
放在本类构造方法的首行,构造方法需要有一个出口(至少有一个构造方法没有用this调用)
放在子类构造方法之中,默认情况下子类隐藏一个super(),去调用父类中默认的构造方法
特殊点
This表示当前对象

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值