/*
面向对象三大特征:
1. 封装
2. 继承
3. 多态
继承:
目前存在的问题:
1. 目前没有把动物类与鸟类的继承关系描述清楚。
2. 动物类与鸟类的代码重复。
继承的格式:
class 类名1 extends 类名2{
}
继承要注意的细节:
1. 子类可以继承父类的成员,但是千万不要为了减少重复代码而且继承,只有
真正存在继承关系的情况下才去继承。
2. 父类私有的成员是不能被继承的。
3. 父类的构造方法也是不能被继承的。
4. 创建子类对象时默认会先调用父类的无参的构造函数。
*/
//动物
class Animal{
String name;
String color;
public Animal(String name,String color){
this.name = name;
this.color = color;
System.out.println("Animal带参的构造函数...");
}
public Animal(){
System.out.println("Animal无参的构造函数...");
}
public void eat(){
System.out.println(name+"在吃...");
}
}
//鸟 鸟是属于动物中一种。
class Bird extends Animal{ // Bird 就称作为Animal的子类。 Animal 称作为Bird的父类、 超类、基类
public Bird(){
System.out.println("Bird无参的构造函数...");
}
public void fly(){
System.out.println(name+"在飞翔...");
}
}
class Demo7
{
public static void main(String[] args)
{
/*
Bird b = new Bird();
b.name = "喜鹊";
b.color = "彩色";
b.age = 1;
b.eat();
*/
new Bird();
new Bird();
}
}
/*
疑问:创建子类对象时为什么会调用父类的构造函数?作用是什么?
作用: 调用父类的构造方法的作用是为了初始化从父类继承下去的属性。
*/
//父类
class Fu{
int x =10;
String name; //名字属性
//构造函数
public Fu(String name){
this.name = name;
System.out.println("父类带参 的构造函数...");
}
public Fu(){
System.out.println("父类无参的构造函数...");
}
}
//子类
class Zi extends Fu{
int x = 20;
public Zi(String name){
//super(name);//指定调用父类一个参数的构造方法
}
public void print(){
System.out.println("父x:"+super.x);
System.out.println("子x:"+x);
}
}
class Demo8
{
public static void main(String[] args)
{
Zi zi = new Zi("大头儿子"); // 创建zi对象的时候,初始化name的属性?
System.out.println("name:"+zi.name);
}
}