Animal.java
//动物类
public class Animal {
//给类定义私有的属性
private String name;
private int age;
//定义构造方法
public Animal(String name,int age){
this.age = age;
this.name = name;
System.out.println("调用Animal有参数的构造方法");
}
//
public Animal(){
System.out.println("调用Animal无参数的构造方法");
}
//无返回值有参数的方法
public void setAge(int age) {
//this关键字代表本类
//this关键字用来区分全局属性与局部属性 this是直接调用全局属性
this.age = age;
}
//有返回值无参数的方法
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
//定义的父类方法
public String shout(){
return "w";
}
}
Dog.java
//继承一个子类来继承父类
//继承一个子类只能继承一个父类
//一个父类可以被多个子类继承
//子类不能调用父类的私有属性
public class Dog extends Animal {
private String color;
public Dog(){
super();//代表调用父类中无参数的构造方法
}
public Dog(String name,int age){
//前提是父类中已经定义的类有参数的构造方法
//super 调用构造方法必须放在第一行
super(name,age);//调用父类中有参数的构造方法
System.out.println("调用Dog类中的有参构造方法");
}
public void setColor(String color) {
this.color = color;
}
//字类重新父类的方法这样的话 子类在实例化之后调用的词方法就是它自己重新过的内容
//如果子类不重新父类的方法 则子类实例化之后调用的此方法叫是父类中方法的内容
@Override
public String shout() {
//代表子类继承的父类
super.shout();
return "cnm";
}
public String getColor() {
return this.color;
}
}
class Demo{
public static void main(String[] args) {
Dog dog = new Dog("草泥马",1);
// Dog dog = new Dog();
// dog.setAge(3);
// dog.setName("草泥马");
dog.setColor("粉色");
dog.shout();
System.out.println(dog.getName()+"的年龄是:"+dog.getAge()+"岁,它的头发是:"+dog.getColor()+dog.shout());
}
}
ShephedDog.java
//子类继承父类,但是父类有另一个类的子类
//只要父类或父类以上的父类的非使用的方法与属性 它都可以使用
public class ShepherdDog extends Dog{
@Override
public String shout() {
super.shout();
return "它的叫声很nice";
}
}
class Demo1{
public static void main(String[] args) {
ShepherdDog s = new ShepherdDog();
s.setName("中华田园牧羊犬"); //在它父类的父类中定义的
s.setColor("黄色"); //在它父类的父类中定义的
s.setAge(6);//在它父类中定义的
System.out.println(s.getName()+"的年龄是:"+s.getAge()+"岁,它的颜色是"+s.getColor()+"的,"+s.shout());
}
}