```
package day03.mxdx.jc.demo1;
/*
当一个类没有显示的继承,那么这个类默认继承自0bject类
0bject类是java类体系中最大的类,0bject之上再没有其他类了
所以换句话来说看似Animal没有父类,但是其实其上还是有Object的;
*/
public class Animal {
private String name;
private int age;
public Animal(){//创建一个无参构造方法
super();
System.out.println("Animal的无参构造方法");
}
public Animal(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;
}
}
```
```java
package day03.mxdx.jc.demo1;
public class Cat extends Animal{//相当于猫继承了animal中的名字和年龄
public void wanmaobang(){
System.out.println("玩逗+猫棒");
}
public void eat(){
System.out.println("吃猫粮");
}
}
```
```java
package day03.mxdx.jc.demo1;
/*
在继承中牵扯一个问题就是面对相同名称的方法需要有不同的表示时
就需要我们进行方法重写了
方法重写:
当父类中方法的实现不能满足子类需求时(例如Animal中有一个eat的方法了,但是在Dog中想要将eat中表示的内容有所修改),
可以在子类中对父类的方法进行重写(覆盖),
这样调用时,就会调用子类中重写的方法。
方法重写的要求:
子类重写的方法的结构 与 父类方法的结构必须一致
方法名,参数列表,返回值必须一致
访问权限应等于或大于父类方法权限
@override 是java中的一个注解标签,定义在重写的方法上面,表示此方法是从父类重写而来的
也可以不用添加,只要重写的方法结构与父类方法结构一致,也算正确的重写,
建议保留:1.编译器可以进行语言验证2.阅读代码时,明确知道此方法是重写的
注意!!!!
构造方法,静态方法不能重写,成员变量不存在重写
*/
public class Dog extends Animal {
public Dog(){//创建一个无参构造方法
super();
System.out.println("Dog的无参构造方法");
}
public Dog(String name,int age){
super(name, age);
}
public void lookHome(){
System.out.println("看家");
}
public void eat(){
System.out.println("吃狗粮");
}
}
```
```java
package day03.mxdx.jc.demo1;
//继承关系每次只能继承一个父类,但是有传承关系,
// 即TD继承Dog,而Dog继承Animal。
//TD也可以调用Animal里的方法进行使用
public class TD extends Dog {
public TD(){
super();
System.out.println("TD的无参构造方法");
}
public TD(String name,int age){
super(name, age);
}
public void type(){
System.out.println("是小泰迪");
}
@Override
//用于在编译中检测在重写中是否出现问题;
//当子父类有同名成员时,可以用super表明调用的是父类中的成员
//用法和this相似,但又不同,this是代表本类对象本身,super表示父类内存空间标识
public void eat(){//将Dog的eat重写了,记得一般来说格式要保持一致性就可以了
super.eat();//调用了Dog中的eat();
super.hashCode();//也可以调用object中的;
System.out.println("爱吃骨头");
}
}
```
```java
package day03.mxdx.jc.demo1;
public class Animaltest {
public static void main(String[] args) {
Dog dog=new Dog();
dog.setAge(6);
dog.setName("旺财");
System.out.println("年龄是"+dog.getAge());
System.out.println("名字是"+dog.getName());
dog.lookHome();
dog.eat();
System.out.println("==============");
Cat cat=new Cat();
cat.setAge(8);
cat.setName("小白");
System.out.println("年龄是"+cat.getAge());
System.out.println("名字是"+cat.getName());
cat.eat();
cat.wanmaobang();
System.out.println("==============");
TD td=new TD();
//调用TD自己的方法
td.type();
//调用TD父类Dog的方法
td.eat();
td.lookHome();
//调用Dog父类Animal的方法
td.setName("可乐");
td.setAge(5);
System.out.println("年龄是"+td.getAge());
System.out.println("名字是"+td.getName());
td.hashCode();//同理也可以调用object中的方法
TD xtq=new TD("哮天犬",12000);
}
}
```