Core Java第十章知识点总结——Object类 包装类 内部类

来源:互联网 发布:自制海报软件 编辑:程序博客网 时间:2024/06/04 18:30

知识点预览

Object类

equals方法

toString方法

getClass方法

包装类的概念

包装类的转换

内部类

 

Object类

 

1. Object类的概念

a)  java.lang.Object是Java中所有类的直接或者间接父类

class A{

}

class B extends A{

}

b)  所有类的对象都可以声明成Object引用(多态)

Object o1 = new A();

Object o2 = new B();

c)  Object的子类继承了Object的方法

getClass()方法

equals()方法

toString()方法

d)       所有方法子类均可覆盖


getClass()方法


1.  getClass方法

返回一个对象的实际类型,不是引用类型

 

equals方法

 

 

 

1. equals方法

比较两个对象的内容是否相等

public boolean equals(Object o);

String s1 = new String(“suns”);

String s2 = new String(“suns”);

System.out.println(s1 == s2);//false

System.out.println(s1.equals(s2));//true

 

2.equals方法的默认实现为对比对象的引用(地址)是否相等

Student s1 = new Student(“suns”,30);

Student s2 = new Student(“suns”,30);

System.out.println(s1.equals(s2));//false

 

3. equals的覆盖

 

      

package chp10.ex03;/** *  * @author Wentasy * @FullName:TestObject3.java * @Description: 本程序演示了equals方法的覆盖 * @Author: Wentasy * @Create Date: 2012-8-14 */public class TestObject3 {  public static void main(String args[]){  Student s1 = new Student("suns",30);  Student s2 = new Student("suns",30);  System.out.println(s1.equals(s2));  }}class Student{private String name;private int age;public Student(String name,int age){this.name = name;this.age = age;}public boolean equals(Object o){//判断传入对象是否是空if(o==null)return false;//判断当前对象和参数是否是同一个对象if(this==o)return true;//判断当前对象和参数是否是同一类型的if(this.getClass()!=o.getClass())return false;Student s = (Student)o;    if(this.name.equals(s.name)&&this.age == s.age){    return true;    }else{    return false;    }}}   

                                                 

toString()方法

1.      toString方法

返回一个对象的字符串表示形式

public String toString();

TestString

Student@128f6ee(无意义,覆盖toString方法)

128f6ee:连续存储空间的首地址

 

 

package chp10.ex04;/** *  * @author Wentasy * @FullName:TestToString.java * @Description: 本程序演示了toString方法的使用 * @Author: Wentasy * @Create Date: 2012-8-14 */class Student{String name;int age;public Student(String name,int age){this.name = name;this.age = age;}public String toString(){return "name: "+this.name+" age: "+this.age;}}public class TestToString {   public static void main(String args[]){   Student s = new Student("suns",30);   System.out.println(s);}}

包装类

 

1.包装类的概念

基本类型----->转换成的类

 

 

 

2.包装类的转换


 


//a)int转换成Integerint i = 10;Integer I = new Integer(i);//b)Integer转换成intInteger I = new Integer(10); int i = I.intValue();//c)String转换成IntegerString s = "12";Integer I = new Integer(s);//d)Integer转换成StringInteger I = new Integer(23);String s = I.toString();//e)String转换成intString s = "20";int i = Integer.parseInt(s);//f)int转换成Stringint i = 20;String s1 = String.valueOf(i);String s2 = ""+i;

 

内部类

 

1.  内部类的概念

 

一个类定义在另一个类的里面

public booleanequals(Object o);

String s1 = newString(“suns”);

String s2 = newString(“suns”);

System.out.println(s1== s2);//false

System.out.println(s1.equals(s2));//true

 

2. 内部类的分类

成员内部类

静态内部类

局部内部类

匿名内部类

 

3.  成员内部类

a) 成员内部类的语法

 

 

package chp10.ex08;/** *  * @author Wentasy * @FullName:TestInner.java * @Description: 本程序演示了成员内部类的创建 * @Author: Wentasy * @Create Date: 2012-8-14 */class MyOuterClass{String outValue;class MyInnerClass{String inValue;public void testInner(){  System.out.println("this is testInner() ");}}}

b) 如何获得成员内部类的对象

 

 

package chp10.ex09;/** *  * @author Wentasy * @FullName:TestInner.java * @Description: 本程序演示了局部内部类的创建和在外部类访问 * @Author: Wentasy * @Create Date: 2012-8-14 */class MyOuterClass{String outValue;class MyInnerClass{String inValue;public void testInner(){  System.out.println("this is testInner() ");}}public void testOuter(){MyInnerClass in = new MyInnerClass();in.testInner();}}public class TestInner{public static void main(String args[]){MyOuterClass out = new MyOuterClass();out.testOuter();}}

 

c)  成员内部类的特点: 可以获得外部类的私有属性

 

package chp10.ex11;/** *  * @author Wentasy * @FullName:TestInner.java * @Description: 本程序演示了在其他类中访问内部类 * @Author: Wentasy * @Create Date: 2012-8-14 */class MyOuterClass{private String outValue;class MyInnerClass{String inValue;//可以获得外部类的私有属性public void testInner(){  System.out.println("this is testInner() "+outValue);}}public void testOuter(){MyInnerClass in = new MyInnerClass();in.testInner();}}public class TestInner{public static void main(String args[]){//首先创建外部类对象MyOuterClass out = new MyOuterClass();//然后通过外部类创建内部类MyOuterClass.MyInnerClass in = out.new MyInnerClass();in.testInner();}}


d) 成员内部类的封装:内部类加上private

 

package chp10.ex12;/** *  * @author Wentasy * @FullName:TestInner.java * @Description: 本程序演示了局部内部类的封装 加上private * @Author: Wentasy * @Create Date: 2012-8-14 */class MyOuterClass{private String outValue;private class MyInnerClass{String inValue;public void testInner(){  System.out.println("this is testInner() "+outValue);}}public void testOuter(){MyInnerClass in = new MyInnerClass();in.testInner();}}public class TestInner{public static void main(String args[]){MyOuterClass out = new MyOuterClass();//The type MyOuterClass.MyInnerClass is not visible//MyOuterClass.MyInnerClass in = out.new MyInnerClass();//in.testInner();}}


4. 静态内部类

a) 静态内部类的语法:在声明内部类时加上static

b)  如何创建静态内部类对象

 

package chp10.ex13;/** *  * @FullName:TestInner1.java * @Description: 本程序演示了静态内部类的创建和在外部类使用 * @Author: Wentasy * @Create Date: 2012-8-14 */class MyOuterClass{String outValue;static class MyStaticInnerClass{String inValue;public  void testInner(){  System.out.println("this is testInner() ");}}public void testOuter(){MyStaticInnerClass m = new MyStaticInnerClass();m.testInner();}}public class TestInner1{public static void main(String args[]){   MyOuterClass m = new MyOuterClass();   m.testOuter();}}package chp10.ex13;/** *  * @Author: Wentasy * @FullName: TestInner2.java * @Description: 本程序演示了静态内部类的创建和在其他类中访问 * @Create Date: 2012-8-14 */class MyOuterClass1{String outValue;static class MyStaticInnerClass{String inValue;public  void testInner(){  System.out.println("this is testInner() ");}}public void testOuter(){MyStaticInnerClass m = new MyStaticInnerClass();m.testInner();}}public class TestInner2{public static void main(String args[]){  //创建静态局部类   MyOuterClass1.MyStaticInnerClass in =    new MyOuterClass1.MyStaticInnerClass();   in.testInner();}}


5.成员内部类和静态内部类的区别

 a)  在其他类创建内部类对象时,创建的语法不同

b)在静态内部类中只能访问外部类的静态成员,可以定义静态方法


c)在成员内部类中能访问所有静态成员、非静态成员,但不可以定义静态方法


package chp10.ex14;/** *  * @Author: Wentasy * @FullName: TestInner1.java * @Description: 成员内部类和静态内部类的区别:在静态内部类中只能访问外部类的静态成员,可以定义静态方法 * @Create Date: 2012-8-14 */class MyOuterClass{                                           private int value;   private static int svalue;   public void testOuter(){ }   public static void testStaticOuter(){}      static class MyStaticInnerClass{  public void testInner(){  //System.out.println(value); //错误  System.out.println(svalue);  //testOuter(); //错误      testStaticOuter();    }    public static void testStaticInner(){}   }}public class TestInner1 {  public static void main(String args[]){  MyOuterClass.MyStaticInnerClass mi = new MyOuterClass.MyStaticInnerClass();  }}


package chp10.ex14;/** *  * @Author: Wentasy * @FullName: TestInner.java * @Description: 成员内部类和静态内部类的区别:在成员内部类中能访问所有静态成员、非静态成员,但不可以定义静态方法 * @Create Date: 2012-8-14 */class MyOuterClass1{                                           private int value;   private static int svalue;   public void testOuter(){ }   public static void testStaticOuter(){ }      class MyStaticInnerClass{  public void testInner(){  System.out.println(value);   System.out.println(svalue);  testOuter();       testStaticOuter();    }    //public static void testStaticInner(){}   }}



6. 局部内部类

a)局部内部类的语法(某些地方类似于局部变量)

                       i.             必须定义在方法内部

                     ii.             作用范围:定义位置开始,到整个方法结束

b)局部内部类在访问局部变量时,局部变量必须声明成final


package chp10.ex16;/** *  * @Author: Wentasy * @FullName: TestInner.java * @Description: 本程序演示了局部内部类的创建和使用 * @Create Date: 2012-8-14 */class MyOuterClass{private int value1  = 1 ;private static int value2 = 2;public void testOuter(){   class MyInnerClass{   public void testInner(){   System.out.println("this is testInner()"+value1);   System.out.println("this is testInner()"+value2);}   }   MyInnerClass m = new MyInnerClass();   m.testInner();}}public class TestInner {   public static void main(String args[]){   MyOuterClass out = new MyOuterClass();   out.testOuter();   }}



7. 匿名内部类

a)   匿名内部类是特殊的局部内部类

b) 当满足如下2个条件时,可以选择应用匿名内部类

                       i.             局部内部类可能就需要创建一个对象

                     ii.             局部内部类需要实现外部接口,或者继承某些父类

c)  方法内部使用

 

package chp10.ex17;/** *  * @Author: Wentasy * @FullName: TestInner.java * @Description: 本程序演示了匿名内部类的创建和使用 * @Create Date: 2012-8-14 */interface MyInterface{void m1();}class MyOuterClass{public void testOuter(){new MyInterface(){        public void m1(){        System.out.println("this is m1 implements ");        }         }.m1();    }}public class TestInner {   public static void main(String args[]){    MyOuterClass out = new MyOuterClass();    out.testOuter();       }}


d)  提高安全性 封装思想的体现

 

阅读全文
0 0
原创粉丝点击