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,希望以后能力提升了回来看这些能嘲笑一下现在的自己吧,有人看了看不懂的可以给我留言,帮我多挑挑刺,提升彼此吧~哭了,鸡肋博主;