20160722(B) 内部类/Object/equal() 比较/(静态)内部类的特点/面试题/局部内部类/匿名内部类/接口的例子/题目
来源:互联网 发布:剑三温柔花哥捏脸数据 编辑:程序博客网 时间:2024/06/06 06:53
内部类
instanceof 判断一个对象是否属于某个类的实例格式:对象 instanceof 类名
Student
student
student instance
interface Animal{public void say();}class Dog implements Animal{ public void say() { System.out.println("狗叫"); } //自己的方法 public void show() { System.out.println("狗狗自己的方法"); }}class Cat implements Animal{public void say(){ System.out.println("猫叫"); }}class AnimalPrint{//对动物进行打印public static void print(Animal a){ //System.out.println(a.say()); a.say(); }}class Eemon1 {public static void main(String[] args) {//狗狗对象Dog dog=new Dog();AnimalPrint(dog);}}
instanceof(实例,运算符) 判断一个对象是否属于某个类的实例
/|\|
格式:对象 instanceof 类名-------------------------------- --|
Student
student
student instance Student 返回(它是一个运算符)boolean类型 true/false
*/
interface Animal{public void say();}class Dog implements Animal//狗类{ public void say() { System.out.println("汪"); } //自己的方法 public void show() { System.out.println("狗狗自己的方法"); }}class Cat implements Animal//猫类{public void say(){ System.out.println("喵"); }}class AnimalPrint{//对动物进行打印public static void print(Animal a)//用接口去接收具体的实现类 { //System.out.println(a.say()); a.say(); //instanceof -- a instanceof Dog//判断是否属于狗类 if (a instanceof Dog) { Dog dog=(Dog)a;//强行转换成狗的类型(多态的向下转型)// ----- dog.show(); } }}class Eemon1 {public static void main(String[] args) {//狗狗对象Dog dog=new Dog();//dog.show();AnimalPrint.print(dog);//猫对象Cat cat=new Cat();AnimalPrint.print(cat);}}Object
是java当中所有类的父类,也叫根类,就是最大的类
被默认继承的父类
class Father
{
...
}
class Son extends Father
{
...
}
**********************************************
toString()
getClass() 返回字节码描述的类 Class class
// -----
专门描述对应的对象的字节码
hashCode()
clone() protected 权限被保护的 意味着外面的类不能调用这个方法
//演示APIclass Student{private String name;private int age; //namepublic String getName(){ return this.name; } public void setName(String name)//没有返回值// ----{ this.name=name; } //age public int getAge(){ return this.age; } public void setAge(int age){ this.age=age; }/*public String toString(){ return "hello";//重写后,输出s和s.toString()都打印hello }*//*public String toString(){ return "age="+this.age+","+"name="+this.name; }*/ //受保护,在子类中可以调用 public Object clone()//objcet知道这个对象,但不知道找个对象具体的内容是什么{ Student student=new Student(); student.setAge(this.getAge()); student.setName(this.getName()); //return super.clone(); return student;}}//测试class Eemon2{public static void main(String[] args) { Student s=new Student(); s.setAge(30); s.setName("James"); System.out.println(s);//输出:Student@1db9742(十六进制)--------------- //类名 +@+ | //打印对象时默认使用toString | // ---------------- | //toString | System.out.println(s.toString());//<span style="font-family: Arial, Helvetica, sans-serif;">输出:Student@1db9742 </span>// | // | //getClass--返回字节码描述的类 | System.out.println(s.getClass().getName());//输出:Student | // ------------ | // class Student | // | System.out.println(s.hashCode());//输出;31168322 | // | System.out.println(Integer.toHexString(s.hashCode()));//1db9742-| //将hashcode转换为十六进制的字符 Object s1=s.clone(); System.out.println(s1);//输出:Student@106d69c(返回的是Object,但我们这里是Student) //内容一致,但地址有变换 Student s2=(Student)s1; System.out.println(s2);//<span style="font-family: Arial, Helvetica, sans-serif;">输出:Student@106d69c</span><pre name="code" class="java"> System.out.println(s2.getClass().getName());//输出:StudentSystem.out.println(s2.getName()); System.out.println(s2.getAge());}}
Object 类中的equal() 比较
需求:比较两个学生对象的age属性值是否相等,相等返回true,否则返回false--使用equals方法
class Student{private int age;public int getAge(){ return this.age; } public void setAge(int age){ this.age=age; } public boolean equals(Object obj){ if (!(obj instanceof Student)) { return false; } Student s=(Student)obj; return this.age==s.age; }} class Dog { String name; }
class Eemon3 {public static void main(String[] args) {Student s1=new Student();s1.setAge(10);Student s2=new Student(); s2.setAge(10);System.out.println(s1==s2);//比较的是内存地址--falseSystem.out.println(s1.equals(s2));//trueSystem.out.println(s1.equals(new Dog()));//Exception in thread "main" java.lang.ClassCastException: Dog cannot be cast to Student}}
内部类:
类中定义的类.
1.成员内部类--定义在成员位置上的类
特点:a.内部类能直接访问外部类的成员(包括私有的成员)
b.外部类要调用内部类的成员,只能通过创建对象的方式去调用
1.成员内部类--定义在成员位置上的类
特点:a.内部类能直接访问外部类的成员(包括私有的成员)
b.外部类要调用内部类的成员,只能通过创建对象的方式去调用
class A//外部类{ private int num=10;class B//内部类{ public void showA() { int num1=20; /*class C { void showD() { System.out.println("num1:"+num1); } }*/ System.out.println(num); System.out.println(num1); }}public void showB(){ new B().showA(); } /* public void showC(){ new C().showD(); }*/}class Eemon4 {public static void main(String[] args) {A a=new A();System.out.println("___________");a.showB();//10 //20}}
内部类的其它特点:(比较难理解)
需求:在外面的 测试类 中能否直接创建内部类的实例进行操作?
可以的:
格式: 外部类.内部类=new 外部类().new 内部类();
-------------------------------------------------------
这种写法几乎不会用
条件:内部类不能是私有化的,是public or 默认的
static的类中只能访问静态的成员,不能被new访问(不需要去new一个实例了)
2.静态的成员内部类 如何在测试类中实例化(直接new出一个静态的内部类的成员实例)
格式 外部类.内部类 = new 外部类.内部类();
-------------
去接收一个对象
class A{ int num1=5;static int num2=10;/*private*/static class B//这里设置了静态,就不能用第一种方法了{public void showA(){ System.out.println("num="+num2); }}}class Eemon5 //测试类{public static void main(String[] args) {//B b=new B();//类B找不到//b.showA(); //外部类.内部类=new 外部类().new 内部类();//A.B b=new A().new B();//b.showA();A.B b2=new A.B();b2.showA();}}
静态内部类中的成员特点:
静态内部类中的成员可以有非静态成员吗?可以class A{static int num1=10;static class B//静态内部类{int num2=20;//非静态成员static int num3=30;//静态成员public void show(){ System.out.println("num1:"+num1); System.out.println("num2:"+num2); System.out.println("num3:"+num3);//非静态的可以去访问那个静态的} public static void show1(){
System.out.println(num1); // System.out.println(num2);//虽然num2在静态类中,但是还是一个非静态的成员,必须通过new对象的方式去调用,"类.方法"的方式 System.out.println(num3);}}}class Eemon6 {public static void main(String[] args) {A.B b=new A.B();b.show();//num1:10 //num2:20 //num3:30A.B.show1();//10
//30 }}
内部类 面试题:
this.num 这写法就是 当前类的对象
类.this 这种写法就是"类的this",指定的是这个类的对象
class A{int num=10;class B{int num=20;public void show(){int num=30;//打印30 System.out.println(num);//打印20 System.out.println(this.num);//当前类的对象的属性//打印10//System.out.println(new A().num);//创建对象调用System.out.println(A.this.num);//A类对象的num属性 }}}class Eemon7 {public static void main(String[] args) {A.B b=new A().new B();b.show();//30 //20 //10}}
局部内部类:定义在方法中
特点:局部内部类可以直接访问自己的内部变量,也可以访问当前方法中的局部变量
直接访问外部类的成员变量
外部类$1局部内部类
外部类$成员内部类(没有匿名)
Q:局部内部类为什么要多出一个编号?
A:局部内部类可以有匿名的.
class A{int num=10;//okclass B//成员内部类---A$B.class {int num2=20;//false}public void show(){ int num3=30;//ok class C//局部内部类---A$1C.class { int num4=40;//ok public void say() { System.out.println("局部内部类say:"+num); } } new C().say();// }}class Eemon8 {public static void main(String[] args) {A a=new A();a.show();}}
匿名内部类:没有名称的局部内部类
格式:new 外面的类/接口/外面的抽象类 (){覆盖外面的类方法/实现外面接口的方法/实现外面抽象类的方法}abstract class A1{public abstract void show1();public abstract void show2();}class A{int num1=10;public void show(){ int num2=20; System.out.println(num2);//20 //匿名内部类--返回的是子类(匿名内部类)的对象--节省空间,提高效率 A1 a1= new A1()//多态向上转型 //--------------- //拿父类去接受子类的对象 { public void show1() { System.out.println("show1"); } public void show2() { System.out.println("show2"); } };//这里要";"
//.show1()可以 a1.show1();//输出 a1.show2();//输出 }
}class Eemon9 {public static void main(String[] args) {A a=new A();a.show();}}
接口的例子:
作业;匿名内部类 普通类的例子
interface Demon{public void show();//}class A{public void show1(){ Demon d= new Demon() { public void show(){ System.out.println("匿名内部类接口的例子");//输出} }; d.show(); }}class Eemon10 {public static void main(String[] args) {A a=new A();a.show1();}}
题目;根据下面的代码写出具体的类和方法
Outer.method().show();Outer.method()--类Outer 里面有method的方法,这个肯定是static
Outer.method().show();--method()返回的是一个对象,这个对象中必须有show()这个方法
interface Demon{public void show();}class Outer{public static Demon method(){ return new Demon() { public void show() { System.out.println("爵士");//输出 } }; }}class Eemon11 {public static void main(String[] args) { Outer.method().show();}}
0 0
- 20160722(B) 内部类/Object/equal() 比较/(静态)内部类的特点/面试题/局部内部类/匿名内部类/接口的例子/题目
- 成员内部类.局部内部类.静态内部类.匿名内部类的区别
- java的内部类、匿名内部类、局部内部类
- java局部内部类和匿名内部类的比较
- 内部类:非静态内部类,静态内部类,局部内部类,匿名内部类详解
- 静态内部类、匿名内部类、局部内部类
- 内部类 静态内部类 成员内部类 局部内部类 匿名内部类
- Java 内部类(成员内部类、局部内部类、静态内部类和匿名内部类)
- 内部类(静态内部类 成员内部类 局部内部类 匿名内部类)
- 内部类---(静态内部类、成员内部类、匿名内部类、局部内部类)
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、局部内部类、静态内部类、匿名内部类)
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- 内部类:成员内部类,局部内部类,静态内部类,匿名内部类
- 匿名内部类的特点
- Linux每天一点文件特殊权限
- yii2 basic 框架的初层应用以及简单的增删改查
- Qt Creator 提供的默认基类只有三种
- activity工作流表结构分析
- PHP文件上传修改配置文件
- 20160722(B) 内部类/Object/equal() 比较/(静态)内部类的特点/面试题/局部内部类/匿名内部类/接口的例子/题目
- 创建临时表空间组
- AndroidStudio mipmap图片大小
- iOS 图形编程总结
- kvo的底层实现
- QDUOJ 26 - 排在第几个
- 最短路径
- Android 4.4以下Listview addHeadView不显示
- Codeforces Round #123 (Div. 2) B - After Training