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) 提高安全性 封装思想的体现