• 面向对象--对象的转型


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

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

    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

     
  • 相关阅读:
    我会采更多的雏菊
    tomcat 9.0中,用cookie进行会话时出现的不合法字符问题
    踩坑tomcat8.5的cookie机制
    安装排错 max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
    centos7虚拟机安装elasticsearch5.0.x-安装篇
    远程登录多用户同时访问Win7系统远程桌面
    ubuntu安装mysqlclient
    ubuntu设置默认python版本
    rabbitmq
    csrf_execmp
  • 原文地址:https://www.cnblogs.com/javatask/p/6753671.html
Copyright © 2020-2023  润新知