172.16.0.67_内部类匿名类

内部类

内部类是将一个类定义在另外一个类的内部,被定义在内部的类称为内部类。包含内部类的类称为外部类。

例如:

class DBHelper{//外部类

​ class RowMapper0{//内部类

​ }

class RowMapper1{

​ }

}

为什么使用内部类呢?

如果一个类只在另外一个类的内部使用,不会再其他的地方使用,就可以定位内部类。

如何创建内部类的对象?

创建实例内部类对象

class DBHelper{//外部类

​ class RowMapper0{//内部类

​ void mapper() {

​ }

​ }

​ static class RowMapper1{

​ }

​ public static void main(String[] args) {

​ DBHelper db = new DBHelper() ;

​ RowMapper0 r1 = db.new RowMapper0();//创建实例内部类RowMapper0对象

​ r1.mapper();

​ }

}

创建静态内部类对象

class DBHelper{//外部类

​ class RowMapper0{//内部类

​ void mapper() {

​ }

​ }

​ static class RowMapper1{

​ void mapper() {

​ }

​ }

​ public static void main(String[] args) {

//创建实例内部类RowMapper1对象

​ RowMapper1 r1 = new DBHelper.RowMapper1();

​ r1.mapper();

​ }

}

匿名类

匿名类是指没有名称的类
表现形式为
(1)new 接口名(){
方法实现(){

}
};
(2)new 抽象类(){
方法实现(){

}
}
例如:

interface Factory{
void service();
}
class Test{
public static void main(String[] args) {
Factory f = new Factory() {
public void service() {
System.out.println("service");
}
};
f.service();
}
}
一般情况下,匿名类都是在只使用一次对象的情况下使用。

课后作业1

public abstract class Area {
    public abstract double getArea();
}
public  class RectArea extends Area{
    private double length,width;

    public RectArea(double length,double width){
        this.length=length;
        this.width=width;
    }
    public double getArea(){
        return length*width;
    }
}
public  class RoundArea extends Area{
    static final double PAI=3.14;
    private double r;

    public RoundArea(Double r){
        this.r=r;
    }
    public double getArea(){
        return PAI*r;
    }
}
import java.util.Scanner;
public class Test{
    public static void main(String[] args) {
        Area area=null;
        System.out.println("请选择要计算的图形:1、圆 ; 2、长方形");
        Scanner input=new Scanner(System.in);
        int choose=input.nextInt();
        if (choose==1) {
            System.out.println("请输入半径:");
            double r=input.nextDouble();
            //父类引用指向子类对象
            area=new RoundArea(r);
            System.out.println("圆形的面积是:" + area.getArea());
        } else if (choose==2) {
            System.out.println("请输入长:");
            double length=input.nextDouble();
            System.out.println("请输入宽:");
            double width=input.nextDouble();
            //父类引用指向子类对象
            area=new RectArea(length, width);
            System.out.println("长方形的面积是:" +  area.getArea());
        }
    }
}

课后作业2

public class DotMatrixtPrinter extends Printer{
    public void print(){
        System.out.println("这是针式打印机");
    }
}
public class InkpetPrinter extends Printer{
    public void print(){
        System.out.println("这是喷墨打印机");
    }
}
public class LaserPrinter extends Printer{
    public void print(){
        System.out.println("这是激光打印机");
    }
}
public abstract class Printer {
    public abstract void print();
}
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        System.out.println("请输入要打印的打印机:1、针式;2、喷墨;3、激光");
        Scanner input = new Scanner(System.in);
        int choose = input.nextInt();
        switch (choose){
            case 1:
                Printer d=new DotMatrixtPrinter();
                d.print();
                break;
            case 2:
                Printer i=new InkpetPrinter();
                i.print();
                break;
            case 3:
                Printer l=new LaserPrinter();
                l.print();
                break;
        }
    }
}

标签

评论


© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1