JAVA012--静态和多态
来源:互联网 发布:标签机打印软件 编辑:程序博客网 时间:2024/05/17 08:01
静态
public class Student {
// static修饰的属性--静态属性或者类属性// 该属性没有存放在对象身上,而是单独存放在数据段的静态区// 全类共享1个--对象.name或者类名.name// 它与对象无关,与类有关// 该属性是在加载期即被产生,初始化// 常量属性可以直接写成public static final的// 变量属性要分析出一定符合全类共享一个值,才能设计为staticpublic static String name1 = "li4";public String name = "zhang3";// static修饰的方法--静态方法或者类方法// 该方法与对象无关,与类有关// 静态方法里面不能写this,因为有可能是使用类名调用,此时没有当前对象// 静态方法里面只能调用到静态属性,不能调用非静态属性// 静态方法只能调用静态方法,不能调用非静态方法// 非静态方法既可以调用静态方法,也可以调用非静态方法// 其原因是static方法在加载期优先被加载// 只有在遇到工具类的工具方法时,我们才将这类方法设计为static的public static void test() { System.out.println("调用到了test方法,name属性的值是:" + name1); test1();}public static void test1() {}public void test2() { test1();}
内部类
//外部类
public class OutClass {
public int fieldA;// 成员内部类// Class文件名---外部类类名$内部类类名.class// 可以有访问修饰符,控制能否在本类之外被使用(属性也是如此)// 可以有属性、初始化块、构造、方法,但都不能是static的---因为该内部类与外部类对象相关!public class InnerClassA { private int a; private int fieldA; { System.out.println("InnerClassA的实例初始化块"); } public InnerClassA() { System.out.println("InnerClassA的构造"); } public int getA() { return a; } public void setA(int a) { this.a = a; } //成员内部类的方法可以操作外部类的属性和方法(不管是否是static的) public void aa() { test(); //当内部类与外部类有同名属性的时候,this.属性指代的是内部类的,外部类.this.属性才能指代外部类的该属性。 System.out.println("InnerClassA的aa方法" + OutClass.this.fieldA); }}//静态内部类---成员内部类的特例//Class文件名---外部类类名$内部类类名.class//可以有访问修饰符,控制能否在本类之外被使用(属性也是如此)//可以有属性、初始化块、构造、方法,除了构造都可以是static的---因为该内部类与外部类对象无关!public static class InnerClassC{ public static int c; static{ System.out.println("InnerClassC的实例初始化块"); } public InnerClassC(){ System.out.println("InnerClassC的构造"); } //静态内部类的方法(无论是否是static的),只能操作外部类的static属性和static方法 public void cc(){ test2(); System.out.println("InnerClassC的cc方法"); }}public void test() { int a = 100; // 局部内部类 // Class文件名---外部类类名$序号内部类类名.class // 没有访问修饰符,只能在本方法中被使用(局部变量也是如此) // 可以有属性、初始化块、构造、方法,但都不能是static的---因为局部内部类不仅与对象无关、与类也不管、只跟方法的调用有关 class InnerClassB { private int b; { System.out.println("InnerClassB的实例初始化块"); } public InnerClassB(){ System.out.println("InnerClassB的构造"); } //局部内部类的方法中,可以操作外部类的属性和方法(不管是否是static) //但是不能调用到所在外部类方法的局部变量,但外部类方法的常量可以调用到 public void bb(){ test2(); System.out.println("InnerClassB的bb方法" + fieldA); } } InnerClassB icb = new InnerClassB(); icb.bb();}public static void test2(){ final int t = 10; System.out.println("外部内的test2方法"); //匿名内部类---在new对象的时候,才去定义该类有哪些属性和方法。 //Class文件名---外部类类名$序号.class //没有访问修饰符,只能在本方法中使用1次 // 可以有属性、初始化块、构造、方法,但都不能是static的---因为局部内部类不仅与对象无关、与类也不管、只跟方法的调用有关 new Object(){ private int d; //局部内部类的方法中,可以操作外部类的属性和方法(不管是否是static) //但是不能调用到所在外部类方法的局部变量,但外部类方法的常量可以调用到 public void dd(){ System.out.println("匿名内部类的DD方法" + t); this.hello(); } private void hello(){ System.out.println("Hello World!"); } }.dd();}
//成员内部类使用:首先产生外部类对象,然后用外部类对象.new的方式产生内部类对象
OutClass out = new OutClass();
OutClass.InnerClassA ica = out.new InnerClassA();
//静态内部类使用: OutClass.InnerClassC icc = new OutClass.InnerClassC();
多态
public static void main(String[] args) {
// TODO Auto-generated method stub
//静态多态:在编译期就能确定执行的方法
//体现一:方法的重载
// Human zhang = new Human();
// zhang.eat();
// zhang.eat(“火锅”);
//体现二:单独使用方法的重写
// ITTeacher li = new ITTeacher();
// li.teach();
// EnglishTeacher liu = new EnglishTeacher();
// liu.teach();
//向上转型技术--自动转换,绝对成功,没有风险 //当父类的引用指向子类的对象时,该引用只能看到来自父类的属性行为,看不到子类特有的属性行为 //当父类的引用指向子类的对象时,该引用调用被子类重写的方法,得到的是子类重写后的效果
// Teacher wang = new ITTeacher();
// wang.teach();
//向下转型技术---强制转换,不一定成功,有风险 //只有在本类的引用指向本类的对象才能成功
// ITTeacher li = (ITTeacher)new Teacher();
// EnglishTeacher liu = (EnglishTeacher)wang;
//动态绑定--父类的引用指向子类对象,同时调用父类被重写方法 Boy wxb = new Boy(); PureGirl shuanger = new PureGirl(); BoldGirl jianning = new BoldGirl(); wxb.setMyGirl(shuanger); wxb.kiss();}
- JAVA012--静态和多态
- 多态之静态方法和非静态方法
- 静态多态和动态多态
- 静态多态和动态多态
- java中静态属性和和静态方法的继承问题 以及多态的实质
- java中静态属性和和静态方法的继承问题 以及多态的实质
- java中静态属性和和静态方法的继承问题 以及多态的实质
- java中静态属性和和静态方法的继承问题以及多态的实质
- java中静态属性和和静态方法的继承问题 以及多态的实质
- 静态和静态包含
- 静态和非静态
- C++的动态多态和静态多态
- C++ 静态多态和动态多态 浅析
- 多态的缺陷:域和静态方法
- 多态的静态绑定和动态绑定
- 成员变量和静态方法没有多态
- 多态实现机制:静态分派和动态分派
- Java的多态(静态绑定和动态绑定)
- 找一个温暖的爱人有多重要
- 3.2.3 TableLayout(表格布局)
- 各种排序算法总结
- 如何让两个元素的相对位置不变,设置css
- 关于Android的Logcat不显示提示信息的解决办法
- JAVA012--静态和多态
- Android WifiDisplay分析二:Wifi display连接过程
- 比赛记录
- Fragment的生命周期
- 在centos 上安装jenkins
- java中的final关键字的作用
- struts封装表单数据
- 哪位同学最优秀
- 第六次C++上机实验