Java 面向对象特性与多态面试题

java 基础核心问题汇总:https://mp.weixin.qq.com/s/yKCUlvaL9GwgpvSjBtvihQ

https://mp.weixin.qq.com/s?__biz=MzI3ODc3NzQ4NQ==&mid=2247483745&idx=1&sn=4e9f6b78bb1419fd1f8aca5022986f1e&chksm=eb509a83dc27139593eeed2f840e5d849b2e9f5e00848e72ac409e1f1448953d3816e86db72e&scene=21#wechat_redirect

面向对象三大特性:封装、继承、多态

    四种特性:封装、继承、多态、抽象

封装:把过程和数据包围起来,使得数据的访问只能通过已定义的接口,保证了对象被访问的隐私性和可靠性。------常见使用是private修饰成员变量,使用固定格式来使用成员变量。

关于数据的访问只能通过已定义的接口,对于这句话依旧存在疑惑。

public class EncapTest {

    //按照要求用,封装成员方法
    private int s;

    private int ss;

    public int getS() {
        return s;
    }

    public void setS(int s) {
        this.s = s;
    }

    public int getSs() {
        return ss;
    }

    public void setSs(int ss) {
        this.ss = ss;
    }
}

public class RunEncap {

    public static void main(String args[]) {
        EncapTest encap = new EncapTest();
        //使用的体现
        encap.setS(55);
        encap.setSs(66);

        System.out.println("Name:" + encap.getS() + "Age:" + encap.getSs());
    }
}

继承性:类的一种层次模型,其提供了一种明确表述共性的方法,对象的新类可以从现有的类中继承派生,类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

    子类使用父类的成员变量和方法,也可以修改使其更符合自己的需求,子类也可以新增方法,实现自己的新需求。子类对父类方法的重写成为重载。而一个类中,方法名相同,参数列表或者返回值不同成为重写。

class A {  

    public String run(D obj) {  

           return ("A & D");  

    }

    public String run(A obj){  

           return ("A & A");  

    }

}     

class B extends A {  

    public String run(B obj) {  

           return ("B & B");  

    }  

    public String run(A obj){  

           return ("B & A");  

    }   

}

class C extends B {}   

class D extends B {}

A aa = new A();

A ab = new B();

B b = new B();

C c = new C(); 

D d = new D();

//注意传入参数类型和调用对象
System.out.println(aa.run(b));    //1, A & A

System.out.println(aa.run(c));    //2, A & A

System.out.println(aa.run(d));    //3, A & D

System.out.println(ab.run(b));    //4, B & A

System.out.println(ab.run(c));    //5, B & A

System.out.println(ab.run(d));    //6, A & D

System.out.println(b.run(b));    //7, B & B

System.out.println(b.run(c));    //8, B & B

System.out.println(b.run(d));    //9, A & D

/**
多态是对象在不同时刻表现出来的多种状态,是一种编译时期状态和运行时期状态不一致的现象。我们在编写或者分析代码时记住如下口诀:

    成员变量:编译看左,运行看左(因为无法重写);

    成员方法:编译看左,运行看右(因为普通成员方法可以重写,变量不可以);

    静态方法:编译看左,运行看左(因为属于类);

*/

多态性是对象在不同时刻表现出来的多种状态,是一种编译时期状态和运行时期状态不一致的现象,多态性包括参数化多态性和包含多态性。

抽象性是指对一类事物的高度提炼以得到共同的共性部分,抽象不需要了解全部细节,而只是一种通用的描述约束,抽象可以是过程抽象或者数据抽象。

在开发中,对于必须实现的内容,使用接口来进行规范。

问:Java 多态的优缺点分别是什么?

答:多态的优点:

调用时可以直接使用父类的引用变量来调用子类的实现方法。

  1. 提高了代码的维护性(继承保证);
  2. 提高了代码的扩展性(由多态保证);

多态的缺点:

  1. 不能使用子类的特有功能(非要使用只能通过不优雅的创建子类对象方式,但是占用内存,其次就是使用强转类型,也容易出现问题);
  2. 向下转型(把父类转换为子类型)中有可能会出现异常;

原文地址:https://www.cnblogs.com/ljangle/p/10448551.html

时间: 2024-10-04 08:56:23

Java 面向对象特性与多态面试题的相关文章

Java面向对象㈡ -- 继承与多态

Java的继承是通过extends和implement来实现的,Java不支持多继承,但是Java支持多层继承以及多实现(接口).Java继承有一个关键字super是用来指向父类.Java继承衍生出覆盖的概念.覆盖被用来支持多态.实际开发中Java通常继承于抽象类,实现于接口.如果不希望一个类被继承,或者一个方法被覆盖,或者一个成员变量被改变,就可以用final修饰.这里只说明两个问题:1,重载和覆盖的区别重载和覆盖的区别:重载发生在同一个类之中,重载要求函数名相同,参数不同(参数个数||参数类

理解java三大特性之多态

---恢复内容开始--- 面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承是为了重用父类代码.两个类若存在IS-A的关系就可以使用继承.,同时继承也为实现多态做了铺垫.那么什么是多态呢?多态的实现机制又是什么?请看我一一为你揭开: 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间

Java三大特性之---多态

面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而言它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承是为了重用父类代码.两个类若存在IS-A的关系就可以使用继承,同时继承也为实现多态做了铺垫. 那么什么是多态呢?多态的实现机制又是什么?请看我一一为你揭开: 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定的,即一个引用变量倒

Java面向对象特性

1.Java语言面向对象的三大关键特征 1)封装:将对象的数据和操作数据的方法相结合,通过方法将对象的数据与实现细节保护起来,称为封装.在java中,通过类 这种语言机制实现了数据的封装与隐藏.2)继承:当两个类有继承关系时,子类可以重用父类中的代码,如果想修改,就重写,继承关系减少了程序中相类似代码的重复说明. java中只支持类之间的单继承,多重继承要通过接口实现.3.)多态:多态的含义可以表达为"对外一个接口,内部多种实现".java语言支持两种形式的多态,运行时多态和编译时多态

浅谈Java三大特性之多态

目录 一.前言 二.发生的条件 三.多态包含(或者说体现在)两个方面: 四.示例 感谢阅读 一.前言 这篇讲下三大特性之一的多态,可以通俗得去理解,多种形态,多种姿态... 那么在面向对象的程序设计中,多态是 指什么? Java引用变量有两个类型:一个是编译类型,一个是运行时类型.编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定.如果编译类型和运行时类型不一致,就可能出现所谓的多态(Polymorphism) "多形性"(Polymorphism)从另一个角

JAVA三大特性之三——多态

作为JAVA的三大特性之一,多态性是很多人都没有弄清楚的一个重要特性,今天我就来从我所理解的角度来说一下. 首先,从他的字面意思来理解,多态,从其字面来理解就是多种形态,多种表现形式.根据这些,我最能想到的例子就是图形,图形是个很大的类,他包含三角形.矩形.圆.梯形.五边形等等,而他们都属于图形类,表现的形式各有特点,属性.方法都不同.所以,我所理解的第一点就是多态指的是子类相对于父类的不同表现形式(包括子类对父类方法的重写,这就是多态的一个重要体现). 另外一点,是我在<Thinking in

Python 面向对象特性二 多态(3-7)

接口类: 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能 在Python中是没有接口的概念的(接口是在Java里的) from abc import ABCMeta,abstractmethod#调用abc模块中的抽象方法 # 接口类 : 接口类就是一个规范 接口类一般是项目设计人员写好的 class Pa

java三大特性之多态

final关键字 class Fu{ publicvoid show(){ System.out.println("这是绝密资料,任何人不能修改"); } } class Zi  extends Fu{ publicvoid show(){ System.out.println("这是一堆垃圾"); } } publicclass FinalDemo { publicstaticvoid main(String[] args) { Zi z = new Zi();

java 面向对象特性说明

extends.implements.abstract和interface extends :继承,对应的是类的话,不能同时继承两个父类,就像人不能同时又两个父亲. 对应的是接口的话,一个对象可以组合多个接口,就像汽车是由发动机.轮子.作为等等组合而成 interface:接口,接口不能直接使用,必须要实现之后才能使用,不能被继承,接口里面的方法都是抽象方法. implements:实现,用于interface的实现,interface必须要实现才能使用,就像主机的鼠标接口,必须实现鼠标才能对接