千峰逆战班,Day20

在千锋逆战班学习的第20天。

觉得为时已晚的时候,恰恰是最早额时候。

今天我学习了JAVA课程的 内部类、Object类的知识。

中国加油!!!武汉加油!!!千锋加油!!!我自己加油!!!

总结:

静态内部类:

                不依赖外部类对象,可直接创建或通过类名访问

                Outer.Inner in=new Outer.Inner();

局部内部类:

                定义在外部类的方法中,作用范围的创建对象的范围仅限于当前方法中

                局部内部类访问外部类局部变量时,因无法保障变量的生命周期与自身相同,默认加上final

                隐藏类的信息、限制类的适用范围。

匿名内部类:

                必须继承一个父类或者实现一个接口。

                定义类、实现类、创建对象语法合并,只能创建一个该类对象

                书写思路流畅,可读性差。

Object:

                getClass()  :获得对象的真是类型

                hashCode()  :保证相同对象返回相同的值,尽量保证不同对象返回不同哈希码

                toString()  :getClass+@+hashCode

                equals()  :值

                                   默认实现为(this==obj),比较两个对象地址的内容时候相同。

习题:

C9.2:  写出下列代码的运行结果:

class Student{
    private int age;
    private String name;
    public Student(){}
    public Student(String name,int age){
        this.name=name;
        this.age=age;
    }
    public String toString(){
        return name+" "+age;
    }
}

public class TestStudent{
    public sattic void main(String[] args){
        Student stu1=new Student();
        Student stu2=new Student("Tom",18);
        System.out.println(stu1);
        System.out.println(stu2);
    }
}

                null 0

                Tom 18

C9.3:  写结果:

public class TestEquals{
    public static void main(String[] args){
        String str1=new String("Hello");
        String str2=new String("Hello");
        System.out.println(str1.equals(str2));
        System.out.println(str1==str2);
    }
}

                true

                false

C9.4  写结果:

class Animal{}
class Dog extends Animal{}
public class TestGetClass{
    public static void main(String[] args){
        Animal a1=new Dog();
        Animal a2=new Animal();
        System.out.println(a1 instanceof Animal);
        System.out.println( a1.getClass()==a2.getClass() );
    }
}

                true

                false

C9.5 Java中的内部类包括:

                成员内部类、静态内部类、局部内部类、匿名内部类

C9.6 为 Worker 类增加 equals 和 toString 方法

class Worker{
	String name;
	int age;
	double salary;

	//父类提供的方法无法满足子类需求时,覆盖之
	public String toString() {
		return "Worker [name=" + name + ", age=" + age + ", salary=" + salary + "]";
	}

	public boolean equals(Object obj){
		if(this==obj){
			return true;
		}
		if(obj==null){
			return false;
		}
		if(this.getClass()!=obj.getClass()){
			return false;
		}
		Worker ww=(Worker)obj;
		if(this.name.equals(ww.name) && this.age==ww.age && this.salary==ww.salary){
			return true;
		}
		return false;
	}
}

C9.9  有如下代码:

class OuterClass{
    private int value1=100;
    private static int value2=200;
    public void method(int value3){
        final int value4=400;
        class InnerClass{
            public void print(){
            //1
            }
        }
    }
}

               //1:System.out.println(value1\2\3\4); jdk8会自己动加上final

C9.10  已知接口Light定义如下:

interface Light{
    void shine();
}
//定义Lamp类:
class Lamp{
    public void on(Light light){
        light.shine();
    }
}
//写一个类TestLamp,部分代码如下:
public class TestLamp{
    public static void main(String[] args){
        Lamp lamp=new Lamp();
        
        //1处使用局部内部类技术,调用lamp的on方法要求输出“shine in red”
        class InnerRed implements Light{
            @Override
            public void shine() {
                System.out.println("shine in red");
            }
        }
        lamp.on(new InnerRed());
        
        //2处使用匿名内部类技术,调用lamp的on方法要求输出“shine in yellow”
        lamp.on( new Light(){
            @Override
            public void shine() {
                System.out.println("shine in yellow");
            }} );
    }
}

               在//1处使用局部内部类技术,调用lamp的on方法要求输出“shine in red”

               在//2处使用匿名内部类技术,调用lamp的on方法要求输出“shine in yellow”

发布了8 篇原创文章 · 获赞 3 · 访问量 510

猜你喜欢

转载自blog.csdn.net/Dukeo00o/article/details/104556041
今日推荐