面向对象

来源:互联网 发布:windows toolkit win7 编辑:程序博客网 时间:2024/06/05 05:14

1、多态

声明变量的是编译时类型,赋值变量的是运行时类型。

发生向上转型时,该对象只能调用父类的方法,实现由子类覆盖后的方法(如果没有覆盖则是父类的方法),成员变量(field)是父类的。

public class Base{public int a=6;public void base(){System.out.println("base");}public void test(){System.out.println("base1");}}public class Sub extends Base{public int a=5;public void sub(){System.out.println("sub");}public void test(){System.out.println("sub1");}}public class test{public static void main(String[] args){Base b=new Sub();System.out.println(b.a);//a=6b.base();b.test();//Sub的方法}}

2、利用组合实现复用

如果两个类之间有明确的整体、部分的关系,例如person类需要arm类的方法。

public class Animal{private void beat(){System.out.println("心脏跳动");}public void breath(){beat();System.out.println("呼吸");}}public class Bird{private Animal a;public Bird(Animal a){this.a=a;}public void breath(){a.breath();System.out.println("Bird");}}public class test{public static void main(String[] args){Animal a=new Animal();Bird bird=new Bird(a);bird.breath();}}

3、==和equals方法

常量池:专门用于管理在编译期被确定并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口中的常量、还包括字符串常量

当new String("hello")时,JVM会先使用常量池来管理"hello"直接量,再调用String类的构造器来创建一个新的String对象,新创建的String对象被保存在堆内存中。new String("hello")一共产生了2个对象。

默认的equals方法比较的是对象的地址,和==一致,但很多类重写equals方法,比较为内容。

比较两个类的方法t.getClass()==Person.class,对于instanceof,当前面对象是后面类的实例或其子类的实例时都返回true。

4、final修饰基本类型变量和引用类型变量的区别

当使用final修饰基本类型变量时,不能对基本类型变量重新赋值,而引用变量则是地址不变,对象完全可以发生改变。

public class test{public static void main(String[] args){final Animal a=new Animal(15);a.setAge(16);System.out.println(a.getAge());}}


0 0
原创粉丝点击