前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java(多态、抽象)

Java(多态、抽象)

作者头像
全栈开发日记
发布2022-05-12 20:40:54
3660
发布2022-05-12 20:40:54
举报
文章被收录于专栏:全栈开发日记

多态

继承是多态的前提,,如果没有继承,没有多态。

继承关系中的特点:

  • 子类可以拥有父类的内容;
  • 子类还可以拥有自己专有的内容;

继承最主要解决的问题:共性抽取

使用多态的例子:

(使用多态new出来的对象,不可直接调用子类中专有的方法)

抽象父类:

代码语言:javascript
复制
public abstract class Animal {  //抽象类 
    public abstract void eat(); //抽象方法 
    public Animal(){
        System.out.println("抽象类的构造方法");
    }
}

继承抽象父类的子类:

代码语言:javascript
复制
public class Cat extends Animal{ //继承于动物类 
    public void eat(){  //这个方法是被重写的
        System.out.println("吃");
    }
    public void sleep(){  //这个方法是猫类自己新的方法
        System.out.println("睡觉");
    }
}

测试类:

代码语言:javascript
复制
public class Test {
    public static void main(String[] args) {
        Animal c=new Cat();//利用多态,用父类new子类
        c.eat();//输出为:吃
        c.sleep();//编译错误,因为现在c的Animal类型
        
        Cat a=(Cat)c;//将父类的c转型为子类a,否则不可以直接调用子类中自己的方法
        a.sleep();//输出为:睡觉 
        ((Cat) c).sleep();//输出为:睡觉 
    }
}

抽象

抽象类,不能实现化对象,不能new;

不能创建对象的原因:如果真的让你new了对象,调用对象的方法,抽象类中的抽象方法没有主体的,根本不能运行;

抽象类的使用:定义类继承抽象类,将抽象类进行重写,创建子类的对象;

抽象方法:方法只有声明,没有方法体;

抽象类:包含抽象方法的类,一定是抽象类;

抽象类的特点:

  1. 抽象类和抽象方法都要被abstract修饰。抽象方法一定是定义在抽象类中;
  2. 抽象类不可以直接创建对象。原因:调用抽象方法没有意义
  3. 只有重写了抽象类中的所有抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类;

之所以继承抽象类,更多的是在思想,是面对共性类的操作会更简单;

  • 抽象类一定是一个父类?

是的,因为不断进行共性抽取出来的;

  • 抽象类中是否可以不定义抽象方法?

可以,目的就是不让这个类直接创建对象;

  • 抽象关键字不可以和哪些关键字共存?
    1. static
    2. private:私有的方法是无法继承,也不存在重写
    3. final
代码语言:javascript
复制
public abstract class yuanGong {
    private String name;
    private String id;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public abstract void work();//抽象方法 
}

继承的好处:

  • 提高了代码的复用性;
  • 提高了代码的可维护型;
  • 让类与类之间产生了关系(继承);

继承的弊端:

  • 类与类之间的耦合度过高;

继承的特点:

  • Java中只能单继承,不能多继承,但可以多重继承;
  • 所有的类都直接或者间接继承了Object类,Object类称为祖宗类;

继承的注意事项:

  1. 使用关键字extends让类与类之间产生继承关系;
  2. 父类的私有成员(private),子类不能继承;
  3. 不能为了继承某个功能而随意进行继承操作;

继承中成员变量的关系

不同名的变量:子类直接继承使用;

同名的变量:默认访问的是子类自己的成员变量;想访问父类中的同名变量,需要super.成员变量;

代码语言:javascript
复制
age=18;//当子类中有这个变量时默认访问子类中的成员变量 
this.age=18;//访问本类中成员变量
super.age=18;//访问父类中的成员变量

方法的重写(override):

指,在子类中,出现了方法声明相同的情况

方法重写的注意事项:

  1. 子类的方法声明要与父类相同;
  2. 子类要重写方法,方法的修饰权限不能比父类的更低;

方法的重载(overload):

在同一类中,多个方法名称相同,他们的参数列表不同(个数,数据类型,顺序)

代码语言:javascript
复制
//下面两个构造方法利用了方法的重载,所以不会报错
public Person(String b){
    System.out.println("我是构造方法1");
}
public Person(int a){
    System.out.println("我是构造方法2");
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈开发日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档