内部类和Object类的深入了解
内部类
Object类
equals与==的区别
1、成员内部类的特征及应用的代码展示:
package com.hwadee;
public class OuterClass {
private String name="外部类属性";
public static void main(String[] args) {
OuterClass oc=new OuterClass();
OuterClass.InnerClass ic=oc.new InnerClass();
ic.addTail();
System.out.println("-----------------------------------");
new OuterClass().new InnerClass().addTail();
Outer out=new Outer();
Outer.Inner in=out.new Inner();
in.show();
}
private class InnerClass{
private String name="内部类属性";
public void addTail() {
String name="内部类局部变量";
System.out.println("把 "+name+" 添加到尾巴上");
System.out.println("把 "+this.name+" 添加到尾巴上");
System.out.println("把 "+OuterClass.this.name+" 添加到尾巴上");
}
}
}
class Outer{
class Inner{
public void show() {
System.out.println("非静态内部方法!!");
}
}
}
2、静态内部类的特征及应用的代码展示:
package com.hwadee;
public class StaticInnerClass_Test {
public static void main(String[] args) {
new Out().test();
System.out.println("------------------------------");
Outside.Inside.staticShow();
new Outside.Inside().show();
}
}
class Out{
private String name="YaoMing";
private static int age=34;
static class StaticInnerClass{
private String message="hello world!";
private static int num=11;
public void show() {
System.out.println(age);
System.out.println(new Out().name);
}
}
public void test() {
System.out.println(StaticInnerClass.num);
System.out.println(new StaticInnerClass().message);
new StaticInnerClass().show();
}
}
class Outside{
static class Inside{
public void show() {
System.out.println("静态内部类实例方法!");
}
public static void staticShow() {
System.out.println("静态内部类静态方法");
}
}
}
3、匿名内部类的特征及应用的代码展示:
package com.hwadee;
public class AnonymousInnerClassImpl {
public static void main(String[] args) {
final String tempMessage="局部变量";
test1(new AbstractSuperClass() {
@Override
public void show() {
System.out.println(tempMessage);
System.out.println("抽象类的匿名内部类实现");
}
});
test2(new SuperInter() {
@Override
public void print() {
System.out.println("接口的匿名内部类实现");
}
});
}
public static void test1(AbstractSuperClass asc) {
asc.show();
}
public static void test2(SuperInter si) {
si.print();
}
}
abstract class AbstractSuperClass{
public abstract void show();
}
interface SuperInter{
public abstract void print() ;
}
4、Object类的概述及应用的代码展示:
package com.hwadee;
public class Object1 {
public static void main(String[] args) {
Student s1=new Student();
s1.setAge(18);
s1.setName("李明");
int age1 = s1.getAge();
String name1 = s1.getName();
System.out.println("年龄="+age1+",名字="+name1);
int a1=s1.hashCode();
System.out.println(a1);
Student s2=new Student();
s2.setAge(19);
s2.setName("张伟");
int age2 = s2.getAge();
String name2 = s2.getName();
System.out.println("年龄="+age2+",名字="+name2);
int a2=s2.hashCode();
System.out.println(a2);
Student s3=new Student();
s3.setAge(19);
s3.setName("张伟");
int age3 = s3.getAge();
String name3 = s3.getName();
System.out.println("年龄="+age3+",名字="+name3);
System.out.println(a1==a2);
System.out.println("--------------------------------");
Class b1=s1.getClass();
System.out.println(b1);
String b2=s1.getClass().getName();
System.out.println(b2);
System.out.println("--------------------------------");
String c1=s1.toString();
System.out.println(c1);
String c3=s2.toString();
System.out.println(c3);
String c2=s1.getClass().getName()+"@"+Integer.toHexString(s1.hashCode());
System.out.println(c2);
System.out.println("--------------------------------");
System.out.println(s1==s2);
boolean equals1= s1.equals(s2);
System.out.println(equals1);
System.out.println("--------------------------------");
System.out.println(s2==s3);
boolean equals2 = s2.equals(s3);
System.out.println(equals2);
}
}
class Student{
int age;
String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Override
public String toString() {
return "Student [age=" + age + ", name=" + name + "]";
}
}
5、equals方法与==号的区别:==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值。equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性。