`

day_12关于类的专题研究

阅读更多

本章知识点:

 

      Obiect类,所有子类的父类。

      Object类的概念、匿名内部类、匿名对象、类的使用方法、

      数据类型的传递 

      接口对象以及关键字的使用。

 

 

----一.Obiect

 

      Object类中的方法适用于所有类。

 

代码案例:

package day11;

 

public class ObjectTest {

public static void main(String[] args) {

Person p = new Person();

System.out.print(p);//相当于=实际上去调用 p.toString();

}

}

 

class Person extends Object{

String name = "五月天";

int age = 35;

/*覆盖Object类的toString()方法*/

public String toString(){

return "name="+name+"\n"+"age="+age;

}

}

 

运行结果:

name=五月天

age=35

 

二、内部类

 

内部类可声明成public或private。

当内部类声明成public或private时,对其访问的限制与成员变量和成员方法。

 

代码案例:

 

package day11;

 

public class InnerTest {

public static void main(String[] args) {

Outer o  = new Outer();

o.displayO();

}

}

 

class Outer {

int m = 50;

void displayO() {

Inner i  = new Inner();

i.displayI();

}

 

class Inner {

void displayI() {

System.out.println( "内部类="+m);

}

}

}

 

运行结果:

内部类=50

 

案例总结:

 

       由于使用了内部类操作,所以程序在调用score属性的时候减少了创建对象的操作,从而省去了一部分的内存开销。

 

但是内部类在声明时,会破坏程序的结构,因此在开发中往往不建议使用。

 

 

星期五, 十一月 13, 2015 14:26:54

 

继续内部类

 

----2.1

用static可以声明属性或方法,而用static也可以声明内部类,

用static声明的内部类---->则变成了外部类,

 

但是用static声明的内部类不能访问非static的外部类属性。

 

----2.2在类外部引用内部类

       内部类也可以通过创建对象从外部类之外被调用,

只要将内部类声明为public。

 

代码案例:

package day11;

 

public class InnerTest {

public static void main(String[] args) {

Outer o = new Outer();

/*o.talik2();*/

Outer.Innner i = o.new Innner();//用外部类的对象去实例化了一个内部类的对象。

i.talk2();

}

}

 

class Outer {

String s = "DOODER";

void talik2(){

Innner n = new Innner();

n.talk2();

}

 

public class Innner{  //用public声明一个内部类,此内部类可被外部类访问

void talk2() {

System.out.println(s);

}

}

}

 

运行结果:

DOODER

 

 

 

2.3.在方法中定义内部类

 

代码案例:

package day11;

 

public class InnerTest {

public static void main(String[] args) {

Outer o = new Outer();//创建一个外部类,访问外部类的方法

o.talik1();

}

}

 

class Outer {

String s = "DOODER";

void talik1(){

class Inner { //在外部类的方法内建立内部类

void talk2() {

System.out.print("外部类的s="+s);

}

}

Inner i = new Inner();//在外部类中创建一个内部类对象,执行内部类的方法

i.talk2();

}

}

 

运行结果:

 

外部类的s=DOODER

 

 

2.3.1   在方法中定义的内部类只能访问方法中的final类型的局部变量,

 

因为用final定义的局部变量相当于一个常量,它的生命周期超出方法运行的生命周期。

 

代码案例:

package day11;

 

public class InnerTest {

public static void main(String[] args) {

Outer o = new Outer();//创建一个外部类,访问外部类的方法

o.talik1(5);

}

}

 

class Outer {

int  score = 95;

void talik1(final int s){

final int temp = 20;  //在方法中定义的内部类只能访问方法中的final类型的局部变量=常量

class Inner { //在外部类的方法内建立内部类

void talk2() {

System.out.print("final案例值为 = "+(score+s+temp));

}

}

Inner i = new Inner();//在外部类中创建一个内部类对象,执行内部类的方法

i.talk2();

}

}

 

运行结果:

final案例值为 = 120

 

 

2.4匿名内部类

 

----2.4.1匿名内部类实际上也是可以继承一个抽象类或实现一个接口。

 

代码案例:

package day11;

 

public class InnerTest {

public static void main(String[] args) {

B b = new B();

/*b.test();*/ //

b.tt();

}

}

 

/*定义一个接口: 验证内部类可以实现接口*/

interface A {

public void fun1();

}

 

/*外部类B,get()、test(方法;

 * 内部类C实现A接口,并实现抽象方法*/

 

class B {

int c =10;

 

class C implements A {

public void fun1() {

// TODO Auto-generated method stub

System.out.print("类c="+c);

}

}

 

/*用tt()方法进行直接new内部类对象,调用内部类中的方法*/

public void tt(){

C th = new C();

th.fun1();

}

 

/*第一种使用两个方法,test()进行new内部类对象,get()进行调用内部类方法。*/

/*public void get(A c){  

c.fun1();

}

 

public void test(){

this.get(new C());

}*/

}

 

 

运行结果:

类c=10

 

P209 从入门到精通

 

上面的案例引入--->匿名内部类

 

2.4.1匿名内部类必须去继承一个父类或是实现一个接口。

 

代码案例:

 

package day11;

 

public class InnerTest {

public static void main(String[] args) {

B b = new B();

b.test();

 

}

}

 

/*本例:

 * 匿名内部类的实现。

 * 注意点:

 *     1.定义一个匿名内部类时去继承一个父类或是实现一个接口所有的抽象方法

 *     2.匿名内部类不能构造函数

 *     3.不能存在静态成员变量或静态成员方法*/

interface A {

public void fun1();

}

 

class B {

int c = 355;

 

public void get(A c){  

c.fun1();

}

 

public void test(){

this.get(new A(){  //匿名内部类实现的A接口

public void fun1(){

System.out.println("匿名内部类="+c);

}

}

);

}

}

 

 

运行结果:

 匿名内部类=355

 

 

详见blog  :http://www.cnblogs.com/chenssy/p/3390871.html

 

 

 

----2.4.1匿名对象

 

 

只使用一次的对象,没有任何一个具体的对象名称引用

 

代码案例:

package day11;

 

public class InnerTest {

public static void main(String[] args) {

new Person().talk(); //直接创建一个匿名对象进行调用类的方法

 

}

}

 

/*本例:

 * 匿名对象:

 * method(A a)

 * 方法1:A a =new A(); method (a);

 * 方法2:method (new A());

 *方法2中new A()就是一个匿名对象.

 */

class Person {

private String name = "waoo";

    private int age = 23;

    

    void talk() {

    System.out.print("名称="+name+"\n"+"年龄="+age);

    }

}

 

运行结果:

名称=waoo

年龄=23

 

    用new Person()声明的对象并没有赋给任何一个Person类对象的引用,

所以此对象只使用了一次,之后会被Java的垃圾收集器回收。

 

----2.4.2方法

 

方法可以简化程序的结构,也可以节省编写相同程序代码的时间--->达到程序模块化的目的。

 

方法格式:

    返回值类型 方法名称(类型 参数1,类型 参数2) {

程序语句;

return 表达式;

}

 

代码案例:

  显示19个星号,换行之后再输出“I Like Java”这个字符串,最后再输出19个星号。

 

在public static void tt(){}加了static,这是因为main()方法本身也声明成static,

而在static方法内只能访问到static成员变量(包括数据成员和成员方法)。

 

代码案例:

package day12;

 

public class ObjectTest {

public static void main(String[] args) {

tt();

}

/*在static方法内只能访问到static成员变量(包括数据成员和成员方法*/

public static void tt() {

for(int i =0 ; i< 9;i++) {

System.out.print("*");

}

System.out.print("\n");

System.out.println("I Like Java");

for(int i = 0;i < 9;i++) {

System.out.print("*");

}

}

}

 

运行结果:

*********

I Like Java

*********

 

----2.4.3方法的参数与返回值

 

星期五, 十一月 13, 2015 17:53:11

 

 

 

 

0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics