A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package com.chenyb;
  2. public interface SuperIntefaceCls {
  3.   //接口中的成员变量:不论是final型,还是普通类型,都只有访问点权限,没有修改的权限
  4.   public final Integer  finalIntType=10;
  5.   public Integer intType=11;
  6.   public void check();
  7.   public abstract void getSomeInfors();

  8. }

  9. public abstract class AbstrCls implements SuperIntefaceCls{
  10. public ComCls cc;

  11. public  AbstrCls(ComCls cc){
  12.   this.cc = cc;
  13. }
  14. public static void main(String[] args) {
  15.   //new AbstrCls().check();错误的写法,抽象类不能实例化
  16.   new AbstrCls(null) {
  17.    
  18.    @Override
  19.    public void getSomeInfors() {
  20.     System.out.println("######");
  21.    }
  22.    @Override
  23.    public void check() {
  24.    System.out.println("@@@@@");
  25.    }
  26.   }.check();
  27. }
  28. public ComCls getCc() {
  29.   return cc;
  30. }
  31. public void setCc(ComCls cc) {
  32.   this.cc = cc;
  33. }
  34. }
  35. package com.chenyb;

  36. public class ComCls implements SuperIntefaceCls{
  37.    private Integer num=0;

  38. public void initParamters(){
  39. //  this.finalIntType = 9;//接口中的变量不能够再次赋值,只能直接使用
  40. //  this.intType = 10;
  41. }

  42. @Override
  43. public  void check() {//必须重写普通方法
  44.   System.out.println("check() executed  in ComCls");
  45. }
  46. @Override
  47. public void getSomeInfors() {//必须重写 抽象类方法
  48.   System.out.println("getSomeInfors() executed  in ComCls");
  49. }
  50. public static void main(String[] args) {
  51.   
  52.   System.out.println("访问接口类中定义的常量finalIntType:"+new ComCls().finalIntType);//引用父接口的成员变量
  53.   System.out.println("访问接口类中定义的常量IntType:"+new ComCls().intType);
  54.   
  55.   ComCls cc= new ComCls();
  56.   new ComCls().check();
  57.   new ComCls().getSomeInfors();
  58.   
  59.   //匿名内部类分为抽象类和普通的类两种
  60.   //-----------------------抽象类的使用------------------------
  61.   //抽象类在创建的时候就要进行重写里边的方法,重写完后,
  62.      //1  直接用new 抽象类名().方法名();2 将new xx{}赋给一个抽象类的对象,通过对象调用
  63.       AbstrCls absCls=new AbstrCls(cc) {//通过传到参数,来公用外边内参数
  64.       ComCls cs = cc;//修改cs的成员值,就是修改cc的成员变量值*
  65.    @Override
  66.    public void getSomeInfors() {
  67.     //cc.num=9;
  68.     cs.num=1;
  69.     System.out.println("Override method getSomeInfors() of absCls:"+cs.num);
  70.    }
  71.    
  72.    @Override
  73.    public void check() {
  74.     //cc.num=10;
  75.     cs.num=20;
  76.     System.out.println("Override method check() of absCls:"+cs.num);
  77.    }
  78.   };//抽象方法和普通方法在这个地方的调用没有什么区别。
  79.   absCls.check();/
  80. public class ChildCls extends ComCls {

  81. public class InnerCls {
  82.     private int innerNum = 0;
  83.   public void setNum(int num) {
  84.    innerNum = num;
  85.   }
  86.   public int getNum() {
  87.    return innerNum;
  88.   }
  89. }
  90. public static void main(String[] args) {
  91.   final ChildCls cc = new ChildCls();
  92.   System.out.print("invoke super's abs method--->");
  93.   cc.getSomeInfors();
  94.   System.out.print("invoke super's com method--->");
  95.   cc.check();
  96.   
  97.   InnerCls ic = null;
  98.   ic = new ChildCls().new InnerCls();//实例化内部类
  99.   System.out.println("##"+ic);
  100.   ic = cc.new InnerCls();//实例化内部类  com.chenyb.ChildCls$InnerCls@1bab50a
  101.   System.out.println("##"+ic);
  102.   ic.setNum(9);
  103.   System.out.println("invoke innercls method:"+ic.getNum());
  104.   ic.setNum(99);
  105.   System.out.println("invoke innercls method:"+ic.getNum());
  106.   //匿名内部类的使用  匿名内部类和它的外部类的成员变量和方法如何公用??
  107.    class Nming{
  108.    public void setNumValue(int x){
  109.       //不能调用当前类的属性,只能访问继承的方法和变量
  110. //    cc.intType = 89;//不可用
  111.     System.out.println("匿名内部类方法开始调用:");
  112.     cc.check();//父类重写的方法可以调用
  113.     cc.getSomeInfors();//父类重新的方法可以调用
  114.    }
  115.   }
  116.   new Nming().setNumValue(0);//调用匿名内部类
  117. }
  118. }
复制代码
相关内部类知识参考:

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马