1、Override和Overload的区别,Overload能改变返回值类型吗?
答:
Override就是方法重写:在子类中,出现和父类中一模一样的方法声明的现象
Overload就是方法重载:在同一类中,出现的方法名相同,参数列表不同的现象
Overload可以改变返回值类型,因为它和返回值类型无关
2、this关键字和super关键字分别代表什么?以及他们各自的使用场景
答:
this:代表当前类的对象引用
super:代表父类存储空间的标识(也就是父类的引用,通过这个可以访问父类的成员)
场景:
成员变量:this.成员变量 super.成员变量
构造方法:this.(...) super(...)
成员方法:this.成员方法 super.成员方法
1、练习:
/* 学生案例和老师案例讲解 学生: 成员变量;姓名,年龄 构造方法:无参,带参 成员方法:getXxx()/setXxx() 老师: 成员变量;姓名,年龄 构造方法:无参,带参 成员方法:getXxx()/setXxx() 看上面两个类的成员,发现了很多相同的东西,所以我们就考虑抽取一个共性的类: 人: 成员变量;姓名,年龄 构造方法:无参,带参 成员方法:getXxx()/setXxx() 学生 继承 人 老师 继承 人 */ //定义人类 class Person { //姓名 private String name; //年龄 private int age; public Person() { } public Person(String name,int age) { //"林青霞",27 this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } //定义学生类 class Student extends Person { public Student() {} public Student(String name,int age) { //"林青霞",27 //this.name = name; 这样子出错,因为name和age是private的,私人的,这样无法访问的。 //this.age = age; 而如果都不写,则直接走父类的无参构造。结果是 null 0 super(name,age); //正确的,显示地调用父类的带参构造 } } //定义老师类 class Teacher extends Person {
} class ExtendsTest4 { public static void main(String[] args) { //创建学生对象并测试 //方式1 Student s1 = new Student(); s1.setName("林青霞"); s1.setAge(27); System.out.println(s1.getName()+"---"+s1.getAge()); //方式2 Student s2 = new Student("林青霞",27); System.out.println(s2.getName()+"---"+s2.getAge()); //补齐老师类中的代码并进行测试。 } }
2、练习
package java8; /* 猫狗案例讲解 先找到具体的事物,然后发现具体的事物有共性,才提取出一个父类。 猫: 成员变量:姓名,年龄,颜色 构造方法:无参,带参 成员方法: getXxx()/setXxx() eat() palyGame() 狗: 成员变量:姓名,年龄,颜色 构造方法:无参,带参 成员方法: getXxx()/setXxx() eat() lookDoor() 共性: 成员变量:姓名,年龄,颜色 构造方法:无参,带参 成员方法: getXxx()/setXxx() eat() 把共性定义到一个类中,这个类的名字叫:动物。 动物类: 成员变量:姓名,年龄,颜色 构造方法:无参,带参 成员方法: getXxx()/setXxx() eat() 猫: 构造方法:无参,带参 成员方法:palyGame() 狗: 构造方法:无参,带参 成员方法:lookDoor() */ class dongWu{ // 成员变量 private String name; private String color; private int age; //无参构造方法 public dongWu(){} //成员方法 public void show(String name,String color,int age){ this.name = name; this.color = color; this.age = age; } //成员方法 public String getName(){ return name; } public String getColor(){ return color; } public int getAge(){ return age; } public void setName(String name){ this.name = name; } public void setColor(String color){ this.color = color; } public void setAge(int age){ this.age = age; } public void sleep(){ System.out.println("ZZzzz....."); } } class Cat extends dongWu{ //无参构造方法 public Cat(){} //有参构造方法 public Cat(String name,String color,int age) { super.show(name, color, age); } public void play(){ System.out.println("猫玩毛球。。。。"); } } class Dog extends dongWu{ //无参构造方法 public Dog(){} //有参构造方法 public Dog(String name,String color,int age) { super.show(name, color, age); } public void look(){ System.out.println("看门?犯二!"); } } class ExtendsText2{ public static void main(String[] args){ //方法1 Cat c1 = new Cat(); c1.setName("短尾猫"); c1.setColor("虎纹"); c1.setAge(1); System.out.println(c1.getName()+" "+c1.getColor()+" "+c1.getAge()); c1.play(); Dog d1 = new Dog(); d1.setName("哈士奇"); d1.setColor("白"); d1.setAge(1); System.out.println(d1.getName()+" "+d1.getColor()+" "+d1.getAge()); d1.look(); //方法2 Cat c2 = new Cat("短尾猫","虎纹",1); System.out.println(c2.getName()+" "+c2.getColor()+" "+c2.getAge()); c2.play(); Dog d2 = new Dog("二哈","白",1); System.out.println(d2.getName()+" "+d2.getColor()+" "+d2.getAge()); d2.look(); } }