关于编程的那些事-4

一.断点调试

        当程序发生异常或者位达到预期执行效果时,不能准确判断有错误原因时,需要程序开发者进行程序跟踪调试。

       使用idea如何进行调试

                首先在代码行的左侧点击鼠标左键出现红色圆圈,并且当前行标记成红色后,证明该行被打上断点。

                然后点击右上方小虫子一样的按钮,程序会以debug的方式运行。

二.如何实现两个对象之间互发消息?

class mag{
    String name;
    public mag(String _name){
        name=_name;
    }
}
class A{
    mag fp;
    public A(mag fpp){
        fp=fpp;
    }
    public void invoke(){
        System.out.print("fp.name");
    }
}
public class Trail {
    public static void main(String args[]){
        mag mg=new mag("jjing");
        A a=new A(mg);
        a.invoke();
    }
}


三.组合与继承的区别以及两者的使用场景

        组合与继承的区别:
                继承是子类继承父类,父类的所有属性和方法都可以被子类访问和调用。组合是指将已存在的类型作为一个新建类的成员变量类型,两个类之间无上下级关系。

        使用场景:
        当你只需要使用另外一个类的方法时使用组合。但是如果你需要使用另外一个类的作用时但你不想被其他的类访问用继承。

四.java中运行时多态的含义是什么?有什么作用?

        运行时多态:当同一个引用变量(父类引用)指向不同的子类实例,然后访问引用变量成员方法, 方法会有不同的表现。换句话说,运行时多态就是重写,就是子类方法重写了父类方法。使用父类引用指向子类对象,再调用某一父类中的方法时,不同子类会表现出不同结果。
        作用:运行时多态性提供了更大的灵活性,因为所有事情都在运行时得到解决。

class animal{
    void bark(){
        System.out.println("animal");
    }
}
class dog extends animal{
    public void bark(){
        System.out.println("dog");
    }
}
class duck extends animal{
    public void bark(){
        System.out.println("duck");
    }
}
public class Trail {
    public static void main(String args[]){
       dog dd=new dog();
       duck uu=new duck();
       fp(dd);
       fp(uu);
    }
    static void fp(animal a){
        a.bark();
    }
}

五.使用接口改写6.8中的程序

        

import  java.lang.Math;
interface Shaps{
    double getArea();
    double getPerimeter();
}
class Rect implements Shaps{
    int width;
    int height;
    public Rect(int _width,int _height){
        width=_width;
        height=_height;
    }
    public double getArea(){
        return width*height;
    }
    public double getPerimeter(){
        return 2*width+2*height;
    }
}
class Triangle implements Shaps{
    int baseA;
    int baseB;
    int baseC;
    double m;
    public Triangle(int _baseA,int _baseB,int _baseC){
        baseA=_baseA;
        baseB=_baseB;
        baseC=_baseC;
        m=(baseA+baseB+baseC)/2.0;
    }
    public double getArea(){
        return Math.sqrt(m*(m-baseC)*(m-baseB)*(m-baseA));
    }
    public double getPerimeter(){
        return baseA+baseB+baseC;
    }
}
class Circle implements Shaps{
    double m;
    public Circle(int d){
        m=d/2.0;
    }
    public double getArea(){
        return m*m*Math.PI;
    }
    public double getPerimeter(){
        return 2*Math.PI*m;
    }
}
public class Trail {
    public static void main(String args[]){
      Rect rect=new Rect(25,25);
      Triangle tri=new Triangle(5,5,8);
      Circle cir=new Circle(25);
    }
    
}

六.自定义一个类,覆写equals方法

        

class A{
    public boolean equals(Object obj){
        if(this==obj) 
        {
            System.out.print("调用equals")
            return true;
        }
        return false;
    }
}

七.举例说明运算符instanceof的使用场景

        "a instanceof    A",其中a为对象的引用,A为类。如果a为A的实例或者A子类的实例,则返回true,如果a为A父类的实例,则返回false;如果两者没有关系,编译不会通过。

        所以当不确定一个对象的类型时可以用此判断

       例:

class pare{}
class pare1 extends pare{}
class pare2 extends pare1{}
class pare3{
    public static void main(String args[]){
         pare1 p1=new pare1;
        if(p1 instanceof pare){
            System.out.println("p instanceof pare ");
        }  
        if(p instanceof pare1){
             System.out.println("p instanceof pare1 ");
        }  
        else{
                System.out.println("p not instanceof pare1 ");    
        }
    }
}

八.抽象类与接口的异同以及两者的使用场景

             抽象类接口
          共同点二者都有抽象方法,都不能实例化。都有自己的声明。并能引用具体子类或实例类对象。
  不同点属性可以有域变量不能有域变量,只能时静态常量
成员方法可以用具体方法,而且具体方法可以调用抽象方法。如果有方法,则全部是抽象方法
实现策略必须有子类继承必须要实现类实现
扩展性

当人们希望发布出去的程序既能保持一定的稳定性,又能具有一定的拓展性时,可以使用接口。

如果某一些类的实现有共通之处,则可以抽象出来一个抽象类,让抽象类实现接口的公用的代码,而那些个性化的方法则由各个子类去实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值