方法重写111

方法重写/覆盖
基本介绍:方法覆盖(重写)就是子类有一个方法,和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法覆盖了父类的方法。

注意事项:
1.子类的方法的参数,方法名称,要和父类方法的参数,方法名称完全一样
2.子类方法的返回类型和父类方法的返回类型一样,或者是父类返回类型的子类
比如:父类 返回类型是 Object,子类方法返回类型是String
3.子类方法不能缩小父类方法的访问权限
重载和重写的比较


package Override_;public class Person{
private String name;
private int age;
public Person(String name,int age){this.name = name;this.age = age;
}
public String say(){return "name=" + name + "age= " +age;
}
}
package Override_;public class Student extends Person {private int id;private double score;public Student(String name, int age, int id, double score) {super(name, age);this.id = id;this.score = score;}public String say(){return super.say() + "id=" + id + "score=" + score;}public int getId() {return id;}public void setId(int id) {this.id = id;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}
}
package Override_;public class OverrideExercise {public static void main(String[] args) {Person person = new Person("javk",10);System.out.println(person.say());Student student = new Student("lake", 13,2123,333);System.out.println(student.say());}
}喂食动物代码
package Poly_;public class animal {private String name;public animal(String name){this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
package Poly_;public class cat extends animal{public cat(String name) {super(name);}
}
package Poly_;public class dog extends animal{public dog(String name) {super(name);}
}
package Poly_;public class food {private String name;public food(String name){this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
package Poly_;public class fish extends food {public fish(String name) {super(name);}
}
package Poly_;public class bone extends food{public bone(String name) {super(name);}
}
package Poly_;
public class master {private String name;public master(String name){this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public void feed(dog dog,bone bone){System.out.println("主人 " + name + "给" + dog.getName() + "吃" + bone.getName());}public void feed(cat cat,fish fish){System.out.println("主人 " + name + "给" + cat.getName() + "吃" + fish.getName());}
}
package Poly_;
public class master {private String name;public master(String name){this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public void feed(dog dog,bone bone){System.out.println("主人 " + name + "给" + dog.getName() + "吃" + bone.getName());}public void feed(cat cat,fish fish){System.out.println("主人 " + name + "给" + cat.getName() + "吃" + fish.getName());}
}



上转型对象







package Poly_.Dynamic_;public class DynamicBinding {public static void main(String[] args) {A a = new B();System.out.println(a.sum());System.out.println(a.sum1());}
}
class A{public int i = 10;public int sum(){return getI() + 10;}public int sum1(){return i + 10;}public int getI(){return i;}}
class B extends A{public int i = 20;public int sum(){return i + 20;}public int getI(){return i;}public int sum1(){return i + 10;}
}40 30
数组多态

package Poly_.polyarr_;public class PloyArray {public static void main(String[] args) {
// 应用实例:现在有一个继承结构如下:要求创建1个Person数组
// 2个Student 对象 和 2个Teacher对象,统一放在数组中,并调用每个对象say方法Person[] persons = new Person[5];//父类的对象可以指向子类的引用persons[0] = new Person("jack",20);persons[1] = new Student("jack",20,100);persons[2] = new Student("smith",19,60);persons[3] = new Teacher("scott",30,200000);persons[4] = new Teacher("king",50,250000);//循环遍历多态数组for (int i = 0; i < persons.length; i++) {
// person[i]编译类型时Person , 运行类型是根据实际情况由jvm来判断persons[i].say(); //动态绑定机制System.out.println(persons[i].say());}}
}
package Poly_.polyarr_;public class Person {private String name;private int age;public Person(String name, int age) {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;}public String say(){return name;}
}
package Poly_.polyarr_;public class Student extends Person{private double score;public Student(String name, int age, double score) {super(name, age);this.score = score;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}@Overridepublic String say() {return super.say() + "score" + score;}
}
package Poly_.polyarr_;public class Teacher extends Person{private double salary;public Teacher(String name, int age, double salary) {super(name, age);this.salary = salary;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}@Overridepublic String say() {return super.say() + "salary" + salary;}
}








验证代码:
package Object_;public class HashCode {public static void main(String[] args) {AA aa1 = new AA();AA aa2 = new AA();AA aa3 = aa2;System.out.println(aa1.hashCode());System.out.println(aa2.hashCode());System.out.println(aa3.hashCode());}
}
class AA{}
public class ToString {public static void main(String[] args) {Monster monster = new Monster("小妖怪","巡山的",1000);System.out.println(monster.toString() + "hashcode" + " "+monster.hashCode());System.out.println("===============================================");System.out.println(monster);}
}
class Monster{private String name;private String job;private double sal;public Monster(String name, String job, double sal) {this.name = name;this.job = job;this.sal = sal;}@Overridepublic String toString() {//重写后,一般是把对象的属性值输出,当然程序员也可以自己定制return "Monster{" +"name='" + name + '\'' +", job='" + job + '\'' +", sal=" + sal +'}';}
}![]()

package Object;public class Finalize_ {public static void main(String[] args) {Car01 bmw = new Car01("宝马");bmw = null; //这时car01对象就是一个垃圾,垃圾回收就会被回收(销毁)//在销毁对象前,会调用该对象的finalize方法//程序员就可以在finalize中写自己的业务逻辑代码(比如释放资源:数据库连接,或者打开文件。。)//如果程序员不再重写finalize,那么就会调用 Object类的 finalize 即默认处理//如果程序员重写了finalize,就可以实现自己的逻辑System.gc();System.out.println("程序退出了。。。");}
}
class Car01{private String name;public Car01(String name) {this.name = name;}@Overrideprotected void finalize() throws Throwable {System.out.println("我们销毁了 汽车 + " + name);System.out.println("我们释放了资源");}
}