您的位置:首页 > 移动开发 > Objective-C

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

2012-08-15 09:21 741 查看
Core Java第十章知识点总结——Object类 包装类 内部类

知识点预览

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转换成Integer

int i = 10;
Integer I = new Integer(i);
//b)Integer转换成int

Integer I = new Integer(10);
int i = I.intValue();
//c)String转换成Integer

String s = "12";
Integer I = new Integer(s);
//d)Integer转换成String

Integer I = new Integer(23);
String s = I.toString();

//e)String转换成int

String s = "20";
int i = Integer.parseInt(s);
//f)int转换成String

int 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) 提高安全性 封装思想的体现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息