zoukankan      html  css  js  c++  java
  • 面向对象--对象的转型

    为什么需要强制转换类型?

    引用变量只能调用它编译类型的方法,不能调用它运行类型的方法,所以就需要类型的强制转换。

    1、一个父类的引用类型变量可以指向其子类的对象

    2、一个父类的引用不可以访问其子类对象的新增加的成员(属性和方法)

    3、可以使用引用变量instanceof(类名 来判断引用变量所指向的对象是否属于该类的或该类的子类)

    4、子类的对象可以当做父类的对象使用--向上转型、 反之--向下转型

    class Animal{

    public String name;

    Animal(String name){

    this.name=name;

    }

    }

    class Cat extends Animal{

    public String eyesColor;

    Cat(String n,String c){

    super(n);

    eyesColor=c;

    }

    }

    class Dog extends Animal{

    public String furColor;

    Dog(String n,String c){

    super(n);

    furColor=c;

    }

    }

    class Test{

    public static void main(String[]args){

    Animal a=new Animal("name");

    Dog d=new Dog("wangwang","black");

    a =new Dog("bigyellow","yellow");向下转型

    System.out.println(a.furColor);//一个父类的引用不能访问其子类对象新增加的成员(属性和方法)

    //可以使用引用变量 类名来判断引用变量是否指向该类或该类子类

    System.out.println(a instanceof Animal);

    System.out.println(a instanceof Dog);

    if(a instanceof Cat){

    Cat d1=(Cat)a;

    }

    }

    }

    final

    修饰变量:

    被他修饰的变量不可改变。一旦赋了初值,就不能被重新赋值。

    修饰成员变量:

    修饰局部变量:

      //final修饰局部变量的初始化

    final int gg = 20;

    final int hh;

    hh=50;

    final修饰的是引用变量时,只是引用值不能改变。对应的对象内部的属性仍然可变。

    final Dog dog = new Dog();

    // dog = new Dog();   //报错!

    dog.age = 77;   //仍然可以修改dog指向对象的属性

    常量的命名:

    一般不用驼峰写法,而是全部大写加下划线分割。比如:

    final int DOG_AGE=18;

    public class Test {

    static final int a;

    //常量要进行初始化,如果采用系统默认值的话,就失去了存在的意义。

    //因此必须显式初始化,可以直接赋值或初始化块中或构造函数中。

    //但只能赋值一次!

    final int b;

    final int c;

    final int d=19;

    static {

    a=3;

    }

    {

    c=50;

    }

    public Test() {

    // TODO Auto-generated constructor stub

    b=20;

    }

    public static void main(String[] args) {

    //final修饰局部变量的初始化

    final int gg = 20;

    final int hh;

    hh=50;  

    //final修饰引用变量时,只是引用值不能改变。对应的对象内部的属性仍然可变。

    final Dog dog = new Dog();

    // dog = new Dog();   //报错!

    dog.age = 77;   //仍然可以修改dog指向对象的属性

    }

    }

    修饰方法:

    该方法不可被子类重写。但是可以被重载!

    在上面AnimalDogCat中,Animal中的shout方法中增加final。则DogCatshout方法不能存在了!

    如果父类方法是private final,那么对子类完全不可见;子类也就可以定义自己的同名的方法。这个不是重写了,而是子类自己新定义的方法。

     

     

    修饰类:

    修饰的类不能有子类,不能被继承。比如:MathString

     
  • 相关阅读:
    一个想法开发与业务,我们互相依赖
    vs2005中文包,和sqlserver2005中文开发版
    C中的指针
    建立一个新的web Site
    Visual Studio 2005 中的新增安全性功能
    htm和html的区别
    完美实现导航滑动功能
    如何避免AJAX的缓存问题
    两个常用的稳定的远端CDN jquery
    推荐一个CSS排错的网址
  • 原文地址:https://www.cnblogs.com/javatask/p/6753671.html
Copyright © 2011-2022 走看看