第七次笔记

继承

儿子继承父亲
优点:儿子可以使用父亲的功能 提高代码的复用性
继承使用场景
Student Dog Car Person
要使用继承关系必须满足:xxx 是xxx
例如:学生是人 ,老师是人,狗是动物
Student 继承Person
Teacher 继承 Person
Dog 继承 Animal;
继承是面向对象程序设计思想,提高代码的复用性,可扩展性,
创建一个Animal类

package day07note;
public class Animal {
    //创建一个动物类
    public  Animal(){
        System.out.println("Animal的无参构造");
    }
    private  String name;
    private int age;
    public void eat(){
        System.out.println("动物吃");
    }
    public void sleep(){
        System.out.println("动物睡");
    }
    public void setName(String name){
        this.name=name;
    }
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Dog类

package day07note;
//创建一个Dog类
/*
狗是动物,继承Animal类,继承父类的行为属性(非私有的)
一个类只能直接继承一个父类,
public class Dog extends Animal 为显示继承
public class  Animal 没有显示继承其他类的时候,此时这个类默认继承object类
public class  Animal extend object
object 类是Java中所有类的基类(父类  超类)
 */
public class Dog extends Animal {
    public  Dog(){
        System.out.println("Dog的无参构造");
    }
    public Dog(String type){
        super();
        this.type=type;
        System.out.println("Dog有参构造方法");
    }
    private  String type;
        public void play(){
            System.out.println("狗会玩");
        }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}

package day07note;
/*Animal默认继承了object;;Dog 继承了Animal XiaoTianQuan继承了Dog相当于XiaoTianQuan继承了三个类*/
public class XiaoTianQuan extends Dog{
    /*
     * 构造方法的作用是初始化类的成员*/
    public XiaoTianQuan(){
        //super("牧羊犬");//调用父类的构造方法;默认存在,如果要用super()显示调用只能放在构造方法的第一行,(原因:先保证父类的初始化)
        System.out.println("哮天犬的无参构造方法");

    }
    public void fly(){
        System.out.println("哮天犬会飞");
    }
}

package day07note;

public class Test {
    public static void main(String[] args) {
        /*父类的*/
        Dog wc=new Dog();
        wc.setName("旺财");
        wc.setAge(2);
        wc.eat();
        wc.sleep();
        /*自己的*/
        wc.setType("牧羊犬");
        wc.play();
        System.out.println(wc.getName());
        System.out.println(wc.getAge());
        System.out.println(wc.getType());

        XiaoTianQuan xiaoTianQuan=new XiaoTianQuan();
        xiaoTianQuan.setName("哮天犬");
        xiaoTianQuan.setAge(5000);
        xiaoTianQuan.setType("中华田园犬");
        xiaoTianQuan.eat();xiaoTianQuan.fly();
        System.out.println(xiaoTianQuan.getAge());
        System.out.println(xiaoTianQuan.getName());
        System.out.println(xiaoTianQuan.getType());

    }
}

输出结果:
在这里插入图片描述
当创建一个子类对象时,会在子类的构造方法中取调用父类的构造方法,先去初始化父类,默认会在构造方法的第一行使用super()调用,如果显示的使用super()调用,也必须放在构造方法的第一行,可以使用super()传参数调用指定的构造方法,

package day07note;

public class Test1 {
    public static void main(String[] args) {
        /*
        * 构造方法的作用是初始化类的成员*/
        XiaoTianQuan xtq = new XiaoTianQuan();
    }
}
/*
结果表明子类的构造方法总是先调用父类的方法;
 */

结果
在这里插入图片描述
使用super()传参数调用指定的构造方法,
使用前:
在这里插入图片描述
代码:
在这里插入图片描述

结果:
在这里插入图片描述

super方法重写

注意:构造方法,静态方法不能重写,成员变量不存在重写
方法的重写
应用场景:
当父类的方法实现不能满足子类需求时, 可以对方法进行重写( override)
在子类中可以根据需要对从基类中继承来的方法进行重写。
方法重写规则
方法名相同、参数列表相同;
返回值类型相同;
访问权限不能小于父类权限;
@Override//java中的注解标签 强化说明此方法为父类中重写过来的,在编译期间,就会对语法进行校验,

package day07note;

public class Cat extends Animal {
    /*当父类实现代码不能满足子类中的需求,可以在子类中将父类的方法重写,也成为方法的覆盖 ,复写*/

    @Override//java中的注解标签   强化说明此方法为父类中重写过来的,在编译期间,就会对语法进行校验,
    public void eat() {
        System.out.println("猫吃鱼");
    }

    @Override
    public void sleep() {
        super.sleep();
    }
}

package day07note;

public class Test2 {
    public static void main(String[] args) {
        Dog wc =new Dog();
        wc.setName("旺财");
        wc.play();
        Cat m=new Cat();
        m.eat();//此时m调用的为Cat类中重写的eat()方法;
    }
}

结果:
在这里插入图片描述

抽象类

抽象方法
	抽象方法是一种特殊的方法:它只有声明,而 没有具体的实现. 
	 抽象方法必须用abstract关键字进行修饰

有抽象方法一定是抽象类,但抽象类中不一定有抽象方法;

package day07note.cxff;
/*如果一个类中还没有包含足够的信息(抽象方法)来描绘一个具体的对象,这样的类就是抽象类*/
//一般用在体系结构的顶层,用来进行功能的声明;
public abstract class Animal {
    /*抽象方法:只有方法体,没有具体的实现*/
    //抽象类可以拥有构造方法,不能创建对象
      int num;
      public Animal(){
          System.out.println("Animal的无参构造");
      }
    public abstract void eat();//在比较顶级的类中定义一个方法即可;
    //抽象类中还可以放其他
    public  void sleep(){
        System.out.println("动物睡觉");
    }
}

package day07note.cxff;
//继承抽象类两种方法
//1.重写抽象类中的抽象方法: @Override public void eat() {
//2.将要继承的这个类也写成抽象类;

public class  Dog extends Animal{
    public Dog(){
        super();
    }
    @Override
    public void eat() {//重写eat()
        System.out.println("狗吃定西");
    }

   /* @Override
    public void sleep() {//重写sleep()
       // super.sleep();//表明父类可以实现;
        System.out.println("狗睡觉");
    }*/
}

package day07note.cxff;

public class Test {
    public static void main(String[] args) {
        Dog wc = new Dog();
        System.out.println(wc.num);//调用父类的
        wc.eat();//调用重写的
        wc.sleep();//若在Dog中没有重写则调用父类的
    }
}

结果:
在这里插入图片描述

多态

封装,包装
继承 子继承父
多态:
同一种事物,在不同时刻表现不同的状态
满足三个条件:
要有继承
要有方法重写
父类引用指向子类对象
LIst list=new ArrayList();
Object obj=new Car();

  		 obj=new Dog();
  		 boj=new Cat();
public  abstract class Animal {
    public void sleep(){
        System.out.println("动物睡觉");
    }
    public abstract void eat();
}


public class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }
}


public class Cat  extends Animal{
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}

public class Test {
    public static void main(String[] args) {
        Dog dog=new Dog();
        Animal a=new Dog();
        a.sleep();
        a.eat();
        a=new Cat();
        a.eat();
    }
}

结果:
在这里插入图片描述

多态语法


public  abstract class Animal {
    int num=10;
    public static void sleep(){
        System.out.println("动物睡觉");
    }
    public abstract void eat();
}

public class Dog extends Animal{
    int num=20;
    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }
    public static void sleep(){
        System.out.println("狗睡觉");
    }
}

public class Cat  extends Animal{
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
    public static void sleep(){
        System.out.println("猫睡觉");
    }
}

package day07note.duotai;

public class Test1 {
    /*设计一个喂动物的方法,传入具体的动物对象,*/
    public static void main(String[] args) {
        Test1 w=new Test1();
        Cat cat =new Cat();
       // w.feedCat(cat);
        Dog dog=new Dog();
        //w.feedDog(dog);
        /*多态的有点,提高程序的扩展性*/
        w.feedAnimal(dog);
        w.feedAnimal(cat);

    }
/*    public void feedCat(Cat cat){
        cat.eat();
    }
    public void feedDog(Dog dog){
        dog.eat();
    }*/
    public void feedAnimal(Animal animal){
        animal.eat();
    }
}

结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值