package day08;
/*
* 球队--------球员 has a 的关系
*
* 学生--------人 is a 的关系
*
* 继承要注意的事项:
* 1.不要为了继承而继承;
* 2.父类的私有成员变量不可以继承。
* 3.父类的构造函数不能被继承。
* 4.创建子类对象时会先调用父类的构造方法。
*
* super 关键字代表父类空间的引用。
* super 关键字作用:
* 1.字符类存在着同名的成员时,在子类中默认访问子类成员,可以通过super关键字访问指定父类成员。
* 2.创建子类对象时,默认会先调用父类无参的构造方法,可以通过super关键字指定调用父类的构造方法。
* super关键字调用父类构造方法要注意的事项:
* 1.如果在子类的构造方法上没有指定调用父类的构造方法,那么Java编译器会在子类的构造方法上面加上super()
* 2.super关键字调用父类的构造函数时,该语句必须是子类构造方法中的第一个语句。
* 3.super关键字与this关键字不能同时出现在同一个构造函数中调用其他的构造函数。
*
* super 与 this 的区别:
* 1.代表的事物不一致。
* 1.super关键字代表的是父类空间的引用;this关键字代表的是所属函数的调用者对象。
* 2.使用前提不一致。
* 1,super关键字必须有继承关系才能使用;this关键字不需要存在继承关系
* 3.调用构造函数的区别
* 1.super是调用父类的构造函数;this是调用本类的构造函数。
*
*
*
*/
class Player{
int num ;
String name ;
public Player(int num, String name){
this.num = num;
this.name = name;
}
public void run(){
System.out.println("Player is running...");
}
}
class Team{
String name;
Player p1;
Player p2;
Player p3;
public void startGame(){
System.out.println(name+"begin...");
}
public Team(String name,Player p1,Player p2,Player p3){
}
}
class Person{
String name = "@13";
public Person( ){
System.out.println("Person 的构造方法被调用了...");
}
public void eat(){
System.out.println(name + "在吃饭...");
}
}
class Student extends Person{
// String name ;
//
public Student(){
System.out.println("Student 的构造方法被调用了...");
}
public void study(){
System.out.println(name+"在学习...");
}
}
public class Demo4 {
public static void main(String[] args) {
// Player p1 = new Player(11,"Ivering");
// Player p2 = new Player(23,"James");
// Player p3 = new Player(30,"Curry");
// Team t = new Team("Laker",p1,p2,p3);
Student s = new Student();
s.study();
}
}
package day08;
/*父类的功能无法满足子类的需求。
*
* 方法重写:子父类出现同名的函数。
* 什么时候要使用方法的重写?父类功能无法满足子类需求时。
*
* 方法重载:在一个类中存在两个或者两个以上的同名的函数,称为方法重载。
*
*方法重写要注意的事项:
* 1.方法名与形参列表必须一致。
* 2.方法重写时,子类的权限必须大于等于父类的权限。(子类的交际圈应该大于父类的交际圈)
* 3.方法重写时,子类的返回值类型范围,必须小于或等于父类的返回值类型。(鱼代表不了全体动物,fish类不能返回一个animal类)
* 4.方法重写时,子类抛出的异常类型范围,要小于或者等于父类抛出的异常类型。(若大于父类的异常类型,就会超出异常处理的范围)
*
* 方法重载要求:
* 1.函数名要一致
* 2.形参列表不一致(形参的个数或形参的类型不一致)
* 3.与返回值类型无关。
*/
class Fu{
String name;
public Fu(String name){
this.name = name;
}
public void eat(){
System.out.println(name+"eat tomato...");
}
}
class Zi extends Fu{
String num;
public Zi(String name){
super(name);
}
public void eat(){
System.out.println("吃1...");
System.out.println("吃2...");
System.out.println("吃3...");
System.out.println("吃4...");
}
}
public class Demo6 {
public static void main(String[] args) {
Zi z = new Zi("big head son...");
z.eat();
}
}