zoukankan      html  css  js  c++  java
  • Java 面向对象特性与多态面试题(7)

    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. 向下转型(把父类转换为子类型)中有可能会出现异常;

  • 相关阅读:
    大一励志的我,现在已经大三了
    Jenkins+K8s实现持续集成
    Jenkins搭建自动化测试环境
    软件开发式样书 6
    软件开发式样书 5
    软件开发式样书 4
    软件开发式样书 3
    软件开发式样书 2
    软件开发式样书 1
    Git学习笔记
  • 原文地址:https://www.cnblogs.com/ljangle/p/10448551.html
Copyright © 2011-2022 走看看