Fork me on GitHub

基础学习--面向对象试题

一、异常捕获

 

package com.pb.demo.demo1;

public class Demo {

    public static void main(String[] args) {
        
        try {
            func();
            System.out.println("A");
        } catch (Exception e) {
            //e.printStackTrace();
            System.out.println("C");
        }
        System.out.println("D");
    }
    
    /**
     * 抛出异常
     * @throws Exception
     */
    public static void func() throws Exception{
        try {
            throw new Exception();
        } finally {
            System.out.println("B");
        }
    }

}

 

结果:B,C,D

 

二、对象的实例化过程

package com.pb.demo.demo2;

public class Test {

    public Test(){
        System.out.println("Test");
    }
    
}
package com.pb.demo.demo2;
/**
 * 继承父类test
 * @author Administrator
 *
 */
public class Demo extends Test {
    
    public Demo(){
        //这里隐藏了super()
        System.out.println("Demo");
    }

    public static void main(String[] args) {
        new Demo();
        new Test();
    }
}

结果:

Test
Demo
Test

三、接口

package com.pb.demo.demo2;

public interface A {

}
package com.pb.demo.demo2;



public class B implements A {
    
  public String func(){
      return "func";
  }
  
  public static void main(String[] args) {
    A a=new B();
    a.func();   //编译失败,因为A接口中并没有这个方法
}
}

四、方法重写

package com.pb.demo.demo3;

public class Fu {

    public boolean show(char a){
        System.out.println(a);
        return true;
    }
}
package com.pb.demo.demo3;

public class Demo extends Fu {

    /**
     * 重写父类的方法
     * 调用时会调用子类重写后的方法
     */
    public boolean show(char a){
        System.out.println(a);
        return false;
    }
    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');
        }
        //结果:A,B,
    }
}

结果;A,B

五、接口

package com.pb.demo.demo4;

public interface A {

}
package com.pb.demo.demo4;

public class B implements A {

    public String test(){
        return "yes";
    }
}
package com.pb.demo.demo4;

public class Demo {
    static A get(){
        return new B();
    }

    public static void main(String[] args) {
        A a=Demo.get();
        System.out.println(a.test()); //编译失败 接口中没有这个方法,这个方法是子类中特有的

    }

}

六、对象初始化

package com.pb.demo.demo5;

public class Super {
    int i=0;
    public Super(String a){
        System.out.println("A");
        i=1;
    }
    public Super(){
        System.out.println("B");
        i+=2;
    }

}
package com.pb.demo.demo5;

public class Demo extends Super {

    public Demo(String a){
        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
    
}

结果:B,C,5

七、匿名内部类的使用

package com.pb.demo.demo6;

public interface Inter {

    public void show(int a,int b);
    public void func();
}
package com.pb.demo.demo6;

public class Demo {

    public static void main(String[] args) {
        // 补足代码,调用两个函数,用匿名内部类实现
        Inter inter = new Inter() {

            @Override
            public void show(int a, int b) {

            }

            @Override
            public void func() {

            }

        };
        inter.show(3, 5);
        inter.func();

    }
}

八、

package com.pb.demo.demo7;

public class TD {
    int y = 6;

     class Inner {
        static final int y = 3;
        // 内部类中如果有static成员,这个内部类必须是static的,

        void show() {
            System.out.println(y); //只能调用局部中final修饰的
        }
    }
}
package com.pb.demo.demo7;

public class TC {

    public static void main(String[] args) {
        TD.Inner ti=new TD().new Inner();
        ti.show(); //3
    }
}

非静态内部类,不能定义静态成员,

内部类如果有静态成员,则这个内部类必须是静态内部类

九、方法重写和方法重载

public class Demo {

    int show(int a,int b){
        return 0;
    }
    
    
}
/**
     * 下列哪里方法可以存在Demo的子类中
     */
    public int show(int a,int b){
        return 0;
    }  //可以方法重写
    
   private int show(int a,int b){
        return 0;
    }  //权限不够
   private int show(int a,long b){
       return 0;
   }
   //可以,和父类不是同一个方法,方法重载
   public short show(int a,int b){
       return 0;
   }//不可以,不是方法重载,不可以和给定的函数出现在同一类中,或者其子类
   
   public static int show(int a,int b){
       return 0;
   }
   //不可以,静态方法,只能覆盖静态

 

十、this,final

this:代表本类对象,哪个对象调用this所有的函数,this就代表哪个对象

final: 

1.修饰类,变量(成员变量,静态变量,局部变量),函数

2.修饰的类不可以被继承

3.修饰的函数不可以被重写

4.修饰的变量是一个常量,只能赋值一次

5.内部类只能访问局部中的final变量

十一、继承对象初始化

package com.pb.demo.demo8;

public class Fu {

    int num=4;
    void show(){
        System.out.println("show Fu");
    }
}
package com.pb.demo.demo8;

public class Zi extends Fu {
    int num=5;
    void show(){
        System.out.println("show Zi");
    }

}
package com.pb.demo.demo8;

public class T {
 public static void main(String[] args) {
    Fu f=new Zi();
    Zi z=new Zi();
    System.out.println(f.num);//4
    System.out.println(z.num);//5
    f.show(); //方法已经重写,执行子类的方法
    z.show();
}
}

结果:

4
5
show Zi
show Zi

 

十二、接口的实现

package com.pb.demo.demo8;

public interface A {

    void show();
}
package com.pb.demo.demo8;

public interface B {

    
    void add(int a,int b);
}
package com.pb.demo.demo7;

import com.pb.demo.demo8.A;
import com.pb.demo.demo8.B;

public class C implements A,B{
    
    private int x;
    private int y;
    // private int sum;
    @Override
    public void add(int a, int b) {
        this.x=a;
        this.y=b;
        
        //sum=a+b;
    }

    @Override
    public void show() {
        System.out.println(x+y);
        //System.out.println(sum);
        
    }
    public static void main(String[] args) {
        C c=new C();
        c.add(4, 2);
        c.show();//通过函数打印以上2个数的和
    }
}

十三、异常执行

package com.pb.demo.demo8;

public class Demo {

    public static void main(String[] args) {
         try {
            showExce();
            System.out.println("A");
        } catch (Exception e) {
            System.out.println("B");
        }finally{
            System.out.println("C");
        }
         System.out.println("D");
         //B,C,D
    }
    public static void showExce() throws Exception{
        throw new Exception();
    }
}

结果:B,C,D

 

十四、继承,子类重写父类

package com.pb.demo.demo8;

public class Super {

    int i=0;
    Super(){
        
    };
    public Super(String s){
        i=1;
    }
    
}
package com.pb.demo.demo8;

public class Demo1 extends Super {

    public Demo1(String s){
        i=2;
    }
    
    public static void main(String[] args) {
        Demo1 d=new Demo1("yes");
        System.out.println(d.i); //2
    }

}

结果:2

十五、方法重写

 

package com.pb.demo.demo9;

public class Super {

    public int get(){
        return 4;
    }
}
package com.pb.demo.demo9;

public class Demo1 extends Super {


    
    public long get(){ //方法重写不能改变返回值类型和参数
        return 4;
    }
    public static void main(String[] args) {
        Super s=new Demo1();
        System.out.println(s.get());
    }

}

 

 

结果:编译失败:方法重写不能改变方法的返回值 和参数

十六、异常

 

package com.day10.demo2;

public class Demo {

    public static void main(String[] args) {
        try {
             func();
        } catch (Exception e) {
            System.out.println("C");
            
        }
        System.out.println("D");
        
    }
    public static void func(){
        try {
            throw new Exception();
            System.out.println("A");//抛出异常下方代码不会被执行
        } catch (Exception e) {
            System.out.println("B");
            
        }
    }

}

 

结果:throw下方的代码不能被执行到

删除后,执行结果:B,D

十七、匿名内部类

 

package com.day10.demo2;

public class Demo1 {
    
    public void func(){
        //位置1:
        
    }
    

    public static void main(String[] args) {
        Demo d=new Demo();
        //位置2
        
    }
    /**
     * A、在位置1写new Inner(); //OK
     * B、在位置2写new Inner(); //主函数是静态的,如果要访问,需要被静态包修
     * C、在位置2写new d.Inner();//格式错误 new new Demo1().Inner();
     * D、在位置2写new Demo.Inner(); //错误因为inner不是静态的
     */

}

 

结果

十八、多重catch顺序

 

package com.day10.demo2;

public class Exc0 extends Exception {

}
package com.day10.demo2;

public class Demo2 {

    public static void main(String[] args) {
        try {
            throw new Exc1();
        } catch (Exception e) {
            System.out.println("Exception");
            /*
             * Exception是最大的异常父类,
             * 在最前面的后,下面的catch永远不会被执行到
             */
        }catch (Exc0 e) {
            System.out.println("Exc0");
        }
    }

}

 

结果:在最前面的后,下面的catch永远不会被执行到,父类的catch要放在最下面

十九、静态调用非静态,匿名内部类实现

 

package com.day10.demo2;

public interface Test {

    
    public void func();
}

 

package com.day10.demo2;

public class Demo3 {


    public  void show(Test t){
        t.func();
    }
    public static void main(String[] args) {
        //补足代码:匿名内部类
        new Demo3().show(new Test(){
            @Override
            public void func() {
                
            }
            
        });
        
    }
}

 

二十、异常带return

 

package com.day10.demo3;

public class Test {

    public static String output="";
    public static void foo(int i){
        try {
            if(i==1)
                throw new Exception();        
            output+="1";
        } catch (Exception e) {
            output+="2";
            return;
        }finally{
            output+="3";
            
        }
        output+="4";
    }
    
    public static void main(String[] args) {
        
        foo(0);
        System.out.println(output);//1,3,4
        foo(1);
        System.out.println(output); //134,2,3
    }

}

 

结果

二十一、补全代码对象数组求最大值

 

package com.day10.demo3;

public class Circle {

    private static double pi=3.14;
    private double radius;//半径
    public Circle(double r){
        this.radius=r;
    }
    public static double compare(Circle[] cir){
        //程序代码,就是求数组中的最大值
        int max=0;
        for(int x=1;x<cir.length;x++){
            if(cir[x].getRadius()>cir[max].radius){
                max=x;
            }            
        }
        return cir[max].getRadius();
        
    }
    public double getRadius() {
        return radius;
    }
    public void setRadius(double radius) {
        this.radius = radius;
    }

}
package com.day10.demo3;

public class TC {

    public static void main(String[] args) {
        
        Circle cir[] =new Circle[3];//创建了个类类型的数组
        cir[0]=new Circle(2.0);
        cir[1]=new Circle(3.0);
        cir[2]=new Circle(5.0);
        System.out.println("最大半径值是:"+Circle.compare(cir));
    }

}

 

二十二、方法调用

 

package com.day10.demo3;

public class Demo {
    private static int j = 0;

    private static boolean methodB(int k) {
        j += k;
        return true;
    }

    public static void methodA(int i) {
        boolean b;
        b = i < 10 | methodB(4);
        b = i < 10 ||methodB(8);
    }

    public static void main(String[] args) {
        methodA(0);
        System.out.println(j);

    }

}

结果:4

二十三、对象中值的比较

 

 

package com.day10.demo4;

public class Circle {

    private double radius;
    public Circle(double r){
        this.radius=r;
    }
    public Circle compare(Circle cir){
        //补足代码
        if (this.radius>cir.getRadius()){
            return this;
        }else{
            return cir;
        }
        //return (this.radius>cir.getRadius()?this:cir);
    }
    public double getRadius() {
        return radius;
    }
    public void setRadius(double radius) {
        this.radius = radius;
    }
    
}
package com.day10.demo4;

public class TC {

    public static void main(String[] args) {
        Circle cir1=new Circle(1.0);
        Circle cir2=new Circle(2.0);
        Circle cir;
        cir=cir1.compare(cir2);
        if(cir1==cir){
            System.out.println("圆1的半径比较大");
        }else{
            System.out.println("圆2的半径比较大");
        }

    }

}

 

 

 

 

posted @ 2015-09-16 17:20  森林森  阅读(612)  评论(0编辑  收藏  举报