美文网首页
JAVA常见问题总计 高级类特性1

JAVA常见问题总计 高级类特性1

作者: Mr_WangZz | 来源:发表于2019-03-28 15:37 被阅读0次
    1. java类是否可以多继承,怎么实现多继承?

      答:java没有多继承,但可以通过接口的形式来达到多继承的目地。

    2. 我比较两个String总是false,但是它们明明都是"abc" !

      答:比较String一定要使用 equalsequalsIgnoreCase 方法,不要使用 “==” !
        
        == 比较的是两个引用(变量)是否指向了同一个对象,而不是比较其内容。

    3. int 和 Integer 有什么区别

      答:Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。
      Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。

      原始类型封装类,booleanBoolean,charCharacter,byteByte,shortShort,intInteger,longLong,floatFloat,doubleDouble

      引用类型和原始类型的行为完全不同,并且它们具有不同的语义。
      引用类型和原始类型具有不同的特征和用法,它们包括:大小速度 问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值: 对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关.

    4. 定义类A 和类B 如下:【基础】

      class A {
          int a=1;
          double d=2.0;
          void show(){
              System.out.println("Class A: a="+a +"\td="+d);
          }
      }
      class B extends A{
          float a=3.0f;
          String d="Java program.";
          void show(){
              super.show( );
              System.out.println("Class B: a="+a +"\td="+d);
          }
      }
      

    (1) 若在应用程序的 main 方法中有以下语句,则输出的结果如何?

    ```
    A a=new A();
    a.show();
    ```
    

    (2) 若在应用程序的 main 方法中定义类B 的对象b,则输出的结果如何?

    ```
    A b=new B();
    b.show();
    ```
    答:输出结果为:
    1)Class A: a=1 d=2.0 
    2)Class A: a=1 d=2.0
    Class B: a=3.0 d=Java program。
    
    1. 下列代码运行结果如何?

      public void testString(){
          String str1 = "尚硅谷";
          String str2 = "尚硅谷";
          String str3 = new String("尚硅谷");
          System.out.println(str1 == str2);//true
          System.out.println(str1 == str3);//false
          System.out.println(str1.equals(str3));//true
          str1 = "尚硅谷atguigu.com";
          String str4 = "atguigu.com";
          String str5 = "尚硅谷" + "atguigu.com";
          System.out.println(str1 == str5);//true
          
          String str6 = (str2 + str4).intern();
          System.out.println(str1 == str6);//false  ---->true
      }
      
    2. 重载(overload)和重写(override,有的书也叫做“覆盖”)的区别?Overload的方法是否可以改变返回值的类型?

      答:方法的重写Override和重载Overload是Java多态性的不同表现。
      重写Override是父类与子类之间多态性的一种表现,
      重载Overload是一个类中多态性的一种表现。
      如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Override)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。
      如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overload)。Overloaded的方法是可以改变返回值的类型。

    3. 写出程序结果

      class Test
      {
          Test()
          {
              System.out.println("Test");
          }
      }
      class Demo extends Test
      {
          Demo()
          {
              //super();
              System.out.println("Demo");
          }
          public static void main(String[] args)
          {
              new Demo();
              new Test();
          }
      }
      
      // 运行结果
      Test
      Demo
      
      Test
      
    1. 写出程序结果(多态)

      class  A {
          private int a;
          public void setA(int a){
               this.a = a;
         }
         public int getA(){
             return a;
         }
      }
      class B extends A {
       private int a;
          public void setA(int a){
              this.a = a;
         }
         // public int getA(){
       //    return a;
          //}
      }
      public class TestPerson {
      
          /**
           * @param args
           */
          public static void main(String[] args) {
              // TODO Auto-generated method stub
              A c = new B();
      
              c.setA(5);
      
              System.out.println(c.getA());
              
          }
      
      }
      //执行结果:
      0
      
    2. 写出程序结果

      class Fu
      {
          boolean show(char a)
          {
              System.out.println(a);
              return true;
          }
      }
      class Demo extends Fu
      {
          public static void main(String[] args)
          {
              int i=0;
              Fu f=new Demo();
              Demo d=new Demo();
              for(f.show('A'); f.show('B')&&(i<2);f.show('C'))
              {
                  i++;
                  d.show('D');
              }   
          }
          boolean show(char a)
          {
              System.out.println(a);
              return false;
          }
      }
      A B
      
    3. 写出程序结果:

      class Super
      {
          int i=0;
          public Super(String a)
          {
              System.out.println("A");
              i=1;    
          }
          public Super()
          {
              System.out.println("B");
              i+=2;
          }
      }
      class Demo extends Super
      {
          public Demo(String a)
          {
              //super();
              System.out.println("C");
              i=5;                
          }
          public static void main(String[] args)
          {
              int i=4;
              Super d=new Demo("A");
              System.out.println(d.i);
          }
      }
      执行结果:B C 5
      
    4. 写出程序结果:

      interface Inter
      {
          void show(int a,int b);
          void func();
      }
      class Demo
      {
          public static void main(String[] args)
          {
              //补足代码;调用两个函数,要求用匿名内部类
              Inter in = new Inter()
              {
                  public void show(int a,int b)
                  {
                  
                  }
                  public void func()
                  {
                  
                  }
              };
      
              in.show(4,5);
              in.func();
              
          }
      }
      
    5. ⭐️选择题,写出错误答案错误的原因,用单行注释的方式。

      class Demo
      {
           int show(int a,int b){return 0;}
      }
      

      下面那些函数可以存在于Demo的子类中。

      A.public int show(int a,int b){return 0;}//可以,覆盖。
      B.private int show(int a,int b){return 0;}//不可以,权限不够。
      C.private int show(int a,long b){return 0;}//可以,和父类不是一个函数。没有覆盖,相当于重载。
      D.public short show(int a,int b){return 0;}//不可以,因为该函数不可以和给定函数出现在同一类中,或者子父类中。
      E.static int show(int a,int b){return 0;}//不可以,静态只能覆盖静态。

    1. 写出程序结果:

      class Fu
      {
          int num=4;
          void show()
          {
              System.out.println("showFu");
          }
      }
      class Zi extends Fu
      {
          int num=5;
          void show()
          {
              System.out.println("showZi");
          }
      }
      class T
      {
          public static void main(String[] args)
          {
              Fu f=new Zi();
              Zi z=new Zi();
              System.out.println(f.num); 
              System.out.println(z.num); 
              f.show(); 
              z.show();   
          }
      }
      执行结果:
      4
      5
      showZi
      showZi
      
    2. 写出程序结果

      class Super
      {
          int i=0;    
          public Super(String s)
          {
              i=1;    
          }
      }
      class Demo extends Super
      {
          public Demo(String s)
          {
              i=2;            
          }
          public static void main(String[] args)
          {
              Demo d=new Demo("yes");
              System.out.println(d.i);
          }
      }
      //编译失败,因为父类中缺少空参数的构造函数。
      //或者子类应该通过super语句指定要调用的父类中的构造函数。
      
    3. 写出程序结果

      class Super
      {
          public int get(){return 4;}
      }
      class Demo15 extends Super
      {
          public long get(){return 5;}            
          public static void main(String[] args)
          {
              Super s=new Demo15();
              System.out.println(s.get());
          }
      }
      
      编译失败,因为子类父类中的get方法没有覆盖。但是子类调用时候不能明确返回的值是什么类型。
      所以这样的函数不可以存在子父类中。
      
    4. 继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
      答:

      父类:
      package test;
      public class  FatherClass
      {
          public FatherClass()
          {
              System.out.println("FatherClass Create");
          }
      }
      子类:
      package test;
      import test.FatherClass;
      public class  ChildClass extends FatherClass
      {
          public ChildClass()
          {
              System.out.println("ChildClass Create");
          }
          public static void main(String[] args) 
          {
              FatherClass fc = new FatherClass();
              ChildClass cc = new ChildClass();
          }
      }
      当执行如下操作
      C:\>java test.ChildClass
      输出结果为:
      FatherClass Create
      FatherClass Create
      ChildClass Create 
      
    5. 观察下面代码

      public class OuterClass { 
        private double d1 = 1.0; 
          //insert code here 
      } 
      You need to insert an inner class declaration at line 3.
      Which two inner class declarations are valid?(Choose two.) 
      A. class InnerOne{
           public static double methoda() {return d1;}
         } 
      B. public class InnerOne{
           static double methoda() {return d1;}
         } 
      C. private class InnerOne{
           double methoda() {return d1;}
         } 
      D. static class InnerOne{
           protected double methoda() {return d1;}
         } 
      E. abstract class InnerOne{
           public abstract double methoda();
         } 
      说明如下:
      一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员。 故 A、B 错
      二.静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;return d1 出错。 
      故 D 错
      三.非静态内部类的非静态成员可以访问外部类的非静态变量。 故 C 正确
      四.答案为C、E 
      
    6. 观察下列代码

    1. public class Test {
    2.      int x = 12;
    3.      public void method(int x) {
    4.          x += x;
    5.          System.out.println(x);
    6.      }
    7. }
    
    Given:
    34. Test t = new Test();
    35. t.method(5);
    
    What is the output from line 5 of the Test class?
    A. 5
    B. 10
    C. 12
    D. 17
    E. 24
    
    结果:B
    

    相关文章

      网友评论

          本文标题:JAVA常见问题总计 高级类特性1

          本文链接:https://www.haomeiwen.com/subject/jgoqbqtx.html