在现实生活中事物与事物之间是存在关系.
1.球员---->球队 整体与部分关系 has a 关系 一个类维护了另一个类的对象
//球员类
class Player{
int num; //编码
String name;
public Player(int num , String name){
this.num = num;
this.name = name;
}
public void run(){
System.out.println(name+"开跑...");
}
}
//球队类
class Team{
String name; //球队的名字
Player p1; //球员1
Player p2; //球员2
Player p3; //球员3
public Team(String name,Player p1,Player p2,Player p3){
this.name = name;
this.p1 = p1;
this.p2 = p2;
this.p3 = p3;
}
//开始比赛
public void startGame(){
System.out.println(name+"开赛啦!!");
}
}
class Demo6
{
public static void main(String[] args)
{
Player p1 = new Player(12,"梅西");
Player p2 = new Player(7,"C罗");
Player p3 = new Player(11,"内马尔");
//球队
Team t = new Team("恒大",p1,p2,p3);
t.startGame();
System.out.println("名字:"+ t.p2.name);
}
}
2.学生----->人 继承的关系 is a 关系
目前存在的问题:
1. 无法描述清楚这两个类之间的继承关系。
2. 存在着重复代码。
面向对象的三大特征:
1. 封装
2. 继承
3. 多态.
继承:继承是通过关键字extends体现的。
继承的格式:
class 类名1 extends 类名2{
}
继承要注意的事项:
1. 千万不要为了减少重复代码而去继承,只有真正存在着继承关系的时候才去继承。
2. 父类私有的成员不能被继承。
3. 父类的构造函数不能被继承。
4. 创建子类对象时默认会先调用父类无参的构造函数。
//人类
class Person{
String name;
private int age;
public Person(String name){
this.name = name;
}
public Person(){
System.out.println("Person类的构造方法被调用了....");
}
public void eat(){
System.out.println(name+"在吃饭...");
}
}
//学生类
class Student extends Person { // Student 就称作为Person类的子类, Person类就称作为Student的父类(超类、基类)
int num; //学号
public Student(){
System.out.println("Student类的构造方法被调用了....");
}
public void study(){
System.out.println(name+"good good study , day day up");
}
}
class Demo7
{
public static void main(String[] args)
{
Student s = new Student();
/*
s.name = "狗娃";
System.out.println("名字:"+ s.name);
s.eat();
*/
}
}
疑问: 为什么要调用父类的构造方法啊?这样子做的意义在那?
调用父类 的构造方法是可以初始化从父类继承下去的属性的。
class Fu{
int x = 10;
String name;
public Fu(String name){
this.name = name;
System.out.println("Fu类d带参的构造方法...");
}
public Fu(){
System.out.println("Fu类无参的构造方法...");
}
}
class Zi extends Fu{
int x = 20;
public Zi(String name){
super(name); //指定调用父类一个参数的构造函数。
}
public void print(){
System.out.println("x1 = "+ x);
}
}
class Demo8
{
public static void main(String[] args)
{
Zi z = new Zi("大头儿子");
System.out.println("name= "+z.name);
}
}
疑问: 为什么要调用父类的构造方法啊?这样子做的意义在那?
调用父类 的构造方法是可以初始化从父类继承下去的属性的。