类小结2:子类对象和父类对象的转换 final关键字 抽象类

来源:互联网 发布:水果蔬菜批发软件 编辑:程序博客网 时间:2024/05/17 05:13

1.子类对象和父类对象的转换

  • 子类对象可以视为其父类对象的有一个对象
  • 父类对象不能被当作是某一个子类的对象
  • 如果一个方法的形参定义的是父类对象,那么调用这个方法时,可以使用子类对象作为实际参数

  • 如果父类对象与引用指向的实际是一个子类对象,那么这个父类对象的引用可以强制转换成子类对象的引用;格式为:(子类名)父类名
Person p2 = new Student();System.out.println("Person变量p2.str=" + p2.str);//p2.str显示结果为Person类中定义的结果,因为///子类可以隐藏父类的成员变量,所以把子类对象转换成父类对象是,访问的是被隐藏的成员变量p2.print();//如果子类重写的print()方法,则调用子类重写的方法。否则调用父类的print()方法 

2.final修饰符

  • final关键字可以修饰类、变量和方法,被修饰的类、变量和方法无法发生改变

    1.final修饰成员变量

  • 类属性:可在静态初始化块中声明该属性时指定初始值
  • 实例属性:可在定义该属性时指定初始值、非静态初始化块中声明该属性、构造方法中指定初始值,否则都没有定义的话,成员变量一直默认为系统指定的0、'\u000'、false或null,它们失去了存在的意义
  • 类中的普通方法中不能对  final修饰的成员变量赋值
  • final成员变量必须由程序员进行显示初始化,即系统不会对final成员进行隐式初始化。而且在初始化final成员变量前,不能访问该变量,否则会出错

   2.final修饰局部变量

  • 系统不会对局部变量进行初始化,局部变量必须由程序员手动赋值,
  • final修饰的局部变量可以在定义的时候不指定默认值,而在后面只能定义一次默认值。也可以定义的时候指定默认值。

   3.final修饰引用类型变量和基本类型变量区别

  • final修饰的基本类型变量,不能对其重新赋值,因此基本类型变量不会被改变
  • final修饰的引用类型变量,保存的仅仅是一个引用,只能保证这个指向类对象的引用的地址不会改变,已知指向同一个对象,即不能被重新赋值,但是对象本身的内容却完全可以发生改变

   4.final修饰的方法和类

  • final修饰的方法不能被重写,因此,如果不希望子类重写父类的某个方法,可以使用final修饰该方法
  • final修饰的方法虽然不能被重写,但是可以被重载
  • final修饰的类不能被继承

3.抽象类  abstract

  • 用abstract修饰的类为抽象类,他拥有所有子类的共同属性和方法
  • 用abstract修饰的方法为抽象方法,该方法只有声明,没有实现的方法体,方法声明后以";"结束。
  • 抽象类中不一定有抽象方法,含有抽象方法的类一定是抽象类
  • 抽象类不能被实例化,只能被子类继承,如果子类实现了抽象类的全部抽象方法,则,子类不再是抽象类,都是子类还是抽象类。
  • 含有抽象方法的类:1.直接定义了一个抽象方法;2.继承了一个抽象父类,但没有完全实现父类包含的抽象方法;3.实现了一个接口,但是没有完全实现接口包含的抽象方法
  • 抽象方法和空方法体不是一个概念 例如:public abstract void test();为一个抽象方法,而public void test(){}方法是一个普通的空方法,有方法体{};
  • final和abstract永远不能同时使用,因为abstract修饰的抽象方法需要被子类重写,而final修饰的方法,不能被重写,两者冲突
  • abstract不能修饰属性和构造方法.
  • static和abstract不能同时使用,因为static修饰的方法是类方法,通过类调用这个方法肯定出错,因为没有方法体,因此没有类抽象方法
  • private和abstract不能同时使用.

0 0
原创粉丝点击