Javase学习12---Java中的多态、普通内部类和匿名内部类;

Java中的多态:

总结:

父类的引用,子类的对象;

可以用类来实现多态,也可以通过接口来实现多态;

 

使用规则:

父类 newname = new 子类();

 

问:Newname是什么类型?谁当对象地址?
父类的类型引用;子类的对象地址;

使用:

只能访问子类和父类共有的方法,且调用的是子类的方法(eg:重写情况);

例子:

基类:

public class Bird {
	public void eat() {
		System.out.println("鸟类具有吃东西的能力");	
	}
	public void sheelp() {
		System.out.println("鸟类具有睡觉的能力");
	}
	public void run() {
		System.out.println("鸟类具有跑的能力");
	}
}

子类:

public class MaoTouYing extends Bird {
	@Override
	public void eat() {
		System.out.println("猫头鹰吃老鼠!");
	}
	public void time() {
		System.out.println("猫头鹰都是在夜间活动!");
	}

}

测试类:

public class Intile {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Bird niao = new MaoTouYing();
		niao.eat();    //子类和父类共有的方法eat,但是调用的是子类重写以后 的eat方法
		niao.sheelp();   //调用的是子类继承过来的方法
		niao.run();  
		//newniao.time();                 //不能调用子类自己的方法;
		
		MaoTouYing newniao = new MaoTouYing();
		newniao.eat();     //调用的是子类重写的eat;
		newniao.sheelp();   //调用的是子类继承父类的方法;
		newniao.run();   
		newniao.time();   //调用的是子类自己的方法;

	}

}

结果:

 

 

内部类:

内部类的属性、方法、构造方法不会于类的相互影响;

Java中的普通内部类

普通内部类在使用时对外隐藏;

 

问:为什么普通内部类在使用时对外隐藏?
无法直接创建一个新的内部类对象,需要通过外部类的对象来创建内部类的对象。

 

普通内部类和匿名内部类命名:

普通内部类在bin包中怎样命名:外部类名$内部类名;

匿名内部类在bin包中怎样命名:外部类名$数字;

 

引用(生成内部类对象)

普通内部类的引用:
外部类名.内部类名  newname =  外部类名.new  内部类名();

 

接口内部类的引用:
外部类名.内部类名  newname =  new  接口名.内部类名()

例子:

外部类:

public class Wai {
	public int i;
	public void f() {
		System.out.println("外部类的方法!");
	}
	public class Nei{
		public int i;
		public void f() {
			System.out.println("Wai.Nei.f");
		}
	}

}

接口:

public interface Inter {
	public abstract void play();
	public class dd{  //接口Inter的普通内部类
		public void out() {
			System.out.println("这是Inter接口的内部类的out方法");
		}
	}

}

测试类:

public class Intile {
	public static void main(String[] args) {
		Wai gg = new Wai();
		gg.i = 2;
		Wai.Nei  mm = gg.new Nei();   //通过"外部类名.内部类名  newname = 外部类对象名.new 内部类名()" 调用;		
		mm.i = 4;
		mm.f();
		Wai.Nei jj = gg.new Nei();   //同一个外部类对象可以拥有多个内部类对象
		jj.i = 8;          //内部类和外部类的同名属性、方法、构造方法之间不受相互影响;
		System.out.println(gg.i);
		System.out.println(mm.i);
		System.out.println(jj.i);
		
		
		  //hhWai 使用了wai的多态引用,创建了一个wai的匿名内部类的对象,使用的是匿名内部类对象和wai的共有的方法,调用的是匿名内部类里的方法;
		Wai hhWai = new Wai() {   //匿名内部类的方法体!   
			public void f() {         //重写了wai的f方法
				System.out.println("匿名内部类的方法!!!");
			}
		};
		hhWai.f();//调用的是匿名内部类里重写的f方法;
		
		
		
		Inter.dd ggInter = new Inter.dd();   //调用接口的内部类 创建一个接口内部类的对象
		ggInter.out();    //调用接口内部类的方法 
		
		//hhInter创建的是Inter接口的内部类的子类对象
		Inter hhInter = new Inter() {  //匿名内部类的方法体
			
			@Override
			public void play() {   //内部类和父类方法体共同方法体,重写以后调用的是内部类的方法;
				// TODO Auto-generated method stub
				System.out.println("接口的匿名内部类!!");
			}
		};
		//hhInter.out();    //非共有方法不能调用
		hhInter.play();
	}

}

结果

 

 

 

 

 

 

 

 

我以后再也不累计知识点才写博客了,新手村的我写的真的好没有营养好肤浅的知识点,一点内涵都没有,QWQ,希望以后能力提升了回来看这些能嘲笑一下现在的自己吧,有人看了看不懂的可以给我留言,帮我多挑挑刺,提升彼此吧~哭了,鸡肋博主;

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值