java基础8---面向对象之多态抽象类接口(代码片段)

冬有雪 冬有雪     2022-11-29     515

关键词:

一、多态polymorphic

1.多态的前提

  • 要有继承关系。
  • 要有方法重写。
  • 要有父类引用指向子类对象。

2.多态中的成员访问特点

1)成员变量

编译看左边(父类),运行看左边(父类)。

//多态:成员变量的访问
public class Polymorphic_Demo 
    public static void main(String[] args) 
        Father f = new Son();
        System.out.println(f.num);

        Son s = new Son();
        System.out.println(s.num);
    


class Father 
    int num = 10;


class Son extends Father 
    int num = 20;

2)成员方法

编译看左边(父类),运行看右边(子类)。也叫动态绑定

//多态:动态绑定
public class Polymorphic_Demo2 
    public static void main(String[] args) 
        Father f = new Son();
        f.lu();

        Son s = new Son();
        s.lu();
    


class Father 
    int num = 10;
    public void lu() 
        System.out.println("F");
    


class Son extends Father 
    int num = 20;
    public void lu() 
        System.out.println("S");
    

3)静态成员方法

编译看左边(父类),运行看左边(父类)。

  • (静态和类相关,算不上重写,所以,访问还是左边的)
  • 只有非静态的成员方法,编译看左边,运行看右边

二、多态中向上转型和向下转型

Person p = new DongShuai();向上转型
DongShuai ds = (DongShuai)p;向下转型

三、多态的好处和弊端

  • 多态的好处
    • a:提高了代码的维护性(继承保证)
    • b:提高了代码的扩展性(由多态保证)
  • 多态的弊端
    • 不能使用子类的特有属性和行为。

四、抽象类

1.抽象类和抽象方法必须用abstract关键字修饰

  • abstract class className
  • public abstract void watchAV();

2.抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口

3.抽象类不能实例化

  • 抽象类实例化要按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。

4.抽象类的子类

  • 要么是抽象类
  • 要么重写抽象类中的所有抽象方法

5.抽象类的成员特点

  • 成员变量:既可以是变量,也可以是常量。abstract不能修饰成员变量
  • 构造方法:有。用于子类访问父类数据的初始化。
  • 成员方法:既可以是抽象的,也可以是非抽象的。
    抽象类的成员方法特性:
    • 抽象方法 强制要求子类做的事情。
    • 非抽象方法 子类继承的事情,提高代码复用性
public class Abstract_Test 
    public static void main(String[] args) 
        DongShuai ds = new DongShuai("dongshuai",23);
        ds.teach();
    


abstract class Teacher 
    String name;
    int age;
    public Teacher() 
    public Teacher(String name,int age) 
        this.name = name;
        this.age = age;
    

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

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

    public String getName() 
        return name;
    

    public int age() 
        return age;
    

    public abstract void teach();


class DongShuai extends Teacher 
    public DongShuai(String name,int age) 
        super(name,age);
    

    public void teach() 
        System.out.println(name + " " + age + " : " + "去山区支教");
    

6.抽象类中的面试题

  • 题1
    一个抽象类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?可以,这么做目的只有一个,就是不让其他类创建本类对象,交给子类完成
  • 题2
    abstract不能和哪些关键字共存?private, static, final

五、接口的概述及其特点

      用关键字interface表示 ,从狭义的角度讲就是指java中的interface,从广义的角度讲对外提供规则的都是接口 。类实现接口用implements表示。

1.接口不能实例化,需要按照多态的方式来实例化。

2.接口的子类,可以是抽象类。但是意义不大。也可以是具体类。要重写接口中的所有抽象方法。(推荐方案)

3.接口的成员特点

  • 接口成员特点
    • 成员变量;只能是常量,并且是静态的并公共的。
      • 默认修饰符:public static final
      • 建议:自己手动给出。
    • 构造方法:接口没有构造方法。
    • 成员方法:只能是抽象方法。
      • 默认修饰符:public abstract
      • 建议:自己手动给出。
public class Interface_Test 
    public static void main(String[] args) 
        DongShuai ds = new DongShuai(123);
        ds.circleArea();
    


interface Inter 
    //public static final double PI = 3.1415926;
    double PI = 3.1415926;
    //public abstract void circleArea();
    void circleArea();


class DongShuai implements Inter 
    private double r;
    public DongShuai(double r) 
        this.r = r;
    
    public void circleArea() 
        System.out.println("面积是:" + 2 * PI * r * r);
    

4.类与类,类与接口,接口与接口的关系

  • 类与类,类与接口,接口与接口的关系

1)类与类:继承关系,只能单继承,可以多层继承。

2)类与接口:实现关系,可以单实现,也可以多实现。并且还可以在继承一个类的同时实现多个接口。

3)接口与接口:继承关系,可以单继承,也可以多继承。

5.抽象类和接口的区别)

1)成员区别

* 抽象类:
    * 成员变量:可以变量,也可以常量
    * 构造方法:有
    * 成员方法:可以抽象,也可以非抽象
* 接口:
    * 成员变量:只可以常量
    * 成员方法:只可以抽象

2)关系区别

  • 类与类
    • 继承,单继承
  • 类与接口
    • 实现,单实现,多实现
  • 接口与接口
    • 继承,单继承,多继承

3)设计理念区别

  • 抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
  • 接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。

2019-05-17java学习日记之面向对象_多态&抽象类&接口(代码片段)

多态 多态的概述:A:多态(polymorphic)事物存在的多种形态B:多态前提a:要有继承关系b:要有方法重写c:要有父类引用指向子类对象多态中的成员访问特点之成员变量:成员变量:编译看左边(父类),运行看左边(父... 查看详情

面向对象之多态

面向对象之多态:  由于子类重写父类方法,然后用父类引用指向子类对象,调用方法时候会进行动态绑定,这就是多态面向对象编程之接口:  接口(interface)是抽象方法和静态常量定义的集合。接口是一种特殊的抽象类,... 查看详情

java语言简介基础组成封装继承多态抽象类内部类接口

目录Java简介Java语言基础组成面向对象对象封装构造函数this关键字static(静态关键字)主函数静态什么时候用呢?面向对象(数组工具对象建立)设计模式继承成员变量子父类中成员函数特点子父类中的构造函数——子类的实例... 查看详情

面向对象之多态

接口接口的概念接口是功能的集合,是一个比抽象类更加抽象的类,接口也是一种数据类型.接口里面只描述做么些事情,并没有具体的实现具体的实现由子类完成,将功能的定义与实现分离世间万物均有接口接口的定义定义类用c... 查看详情

8面向对象之抽象类+接口+内部类

1final关键字   用法:  1)使用final修饰变量,该变量就变成常量,在运行的过程中无法重新赋值。  2)使用final修饰方法,该方法无法在子类中重写  3)使用final修饰的类,不能被继承(派生其他子... 查看详情

java入门之面向对象-划重点

目录Java入门(七)之面向对象-划重点0.面向对象的概念0.1面向对象和面向过程0.2属性和方法1.面向对象的特征1.1对象唯一1.2抽象性1.3三大特性——继承、封装、多态2.继承相关2.1抽象类2.2接口3.多态相关3.1构造方法课后习题角色... 查看详情

objectorientedprogramming-面向对象的编程(多态抽象类接口)-java-细节狂魔(代码片段)

文章目录回顾上篇博客内容回到本文理解多态案例(使用多态,打印多种形状)代码1代码2(实现多态)效果图代码三,通过方法和向上转型,来实现多态。让你们更加直观代码如下附图总结:拓展:使用... 查看详情

面试总结之谈谈你对面向对象的理解

...态性设计的。总结一下,如果说封装和继承是面向对象的基础,那么多态则是面向对象最精髓的理论。掌握多态必先了解接口,只有充分理解接口才能更好的应用多态。---------------------作者:samhan0616来源:CSDN原文:https://blog.csd 查看详情

面向对象(接口,多态)

接口(1)当抽象类中的方法都是抽象的时候,java就提供了一种新的表现形式:接口,接口是功能的集合接口不能创建对象(2)格式 父接口:publicinterfaceTnter{ } 子类:publicclassinterImpimplementsItner{ }接口的使用 1.接口不能创建对象 2.定义实现... 查看详情

java面试题详解一:面向对象三大特性(代码片段)

...性:抽象,封装,继承,多态抽象,封装,继承是多态的基础。多态是抽象,封装,继承的表现。2.什么是多态不同类的对象对同一消息作出不同的响应叫做多态3.多态的作用简单来说:解藕。详细点就是,多态是设计模式的基... 查看详情

面向对象编程(代码片段)

文章目录面向对象编程(包、继承、组合、多态、抽象类、接口)包继承super关键字finalprotected关键字组合多态抽象类接口面向对象编程(包、继承、组合、多态、抽象类、接口)包包其实就是类的集合,其本... 查看详情

面向对象的学习

java的编程基础知识已经大体掌握,而接下来的学习便是java核心的知识,面向对象,这也是java跟其他面向过程的程序语言最大的不同。面向对象的知识点共有:面向对象的概念、类与对象、封装、多态、继承、抽象、接口、内部... 查看详情

java基础知识回顾之三-----封装继承和多态

前言在上一篇中回顾了java的修饰符和String类,这篇就来回顾下Java的三大特性:封装、继承、多态。封装什么是封装在面向对象程式设计方法中,封装是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。封装可以被... 查看详情

php面向对象封装继承多态接口重载抽象类最终类总结(代码片段)

1、面向对象封装继承多态 接口、重载、抽象类、最终类面向对象封装继承多态 首先,在解释面向对象之前先解释下什么是面向对象?[面向对象]1、什么是类? 具有相同属性(特征)和方法(行为)的一系列个体的集合,... 查看详情

面向对象特征之多态性(代码片段)

多态含义:1.在同一个方法中,这种由于参数类型不同而导致执行效果各异的现象。2.在Java中,子类的对象可以替代父类的对象使用。  ?一个变量只能有一种确定的数据类型  ?一个引用类型变量可能指向(引用)多种不同类型... 查看详情

java面向对象的多态性及抽象类和接口

一:Object类Object类是所有Java类的根基类(“祖先类”)如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类1.toString()方法Object类中定义有publicStringtoString()方法,其返回值是String类型,描述当前对象的有关信息。... 查看详情

面向对象的特性是啥?

...态性设计的。总结一下,如果说封装和继承是面向对象的基础,那么多态则是面向对象最精髓的理论。掌握多态必先了解接口,只有充分理解接口才能更好的应用多态。 查看详情

java面向对象之抽象类,接口

抽象类:含有抽象方法的类被声明为抽象类 抽象方法由子类去实现含有抽象方法的类必须被声明为抽象类抽象类被子类继承,子类(如果不是抽象类)必须重写抽象类中的所有抽象方法抽象方法:声明而未被实现的方法抽象类不... 查看详情