zoukankan      html  css  js  c++  java
  • Java自学笔记(13):【面向对象】方法覆盖,final关键字,对象转型

    方法同名时:方法重载,方法覆盖

      同一类内的方法同名:方法重载

      子类与父类方法同名:方法覆盖

    //在包person下
    //Person.java
    package person;
    
    public class Person {    
        public Person(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
        protected String name;
        protected int age;
        public String getInfo() {
            return "姓名:"+name+",年龄:"+age+" ";
        }
    }
    
    //Student.java
    package person;
    
    public class Student extends Person {
        protected String school;
        protected String grade;
        Student(String name,int age,String school,String grade){
            super(name,age);
            this.school=school;
            this.grade=grade;
        }
        public String getInfo() {
            return super.getInfo()+"学校:" +school+" ,年级:"+grade;
        }
    }
    
    //Demo.java
    package person;
    
    public class Demo {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Person person =new Person("小张",18);
            System.out.println(person.getInfo());
            
            Student student=new Student("小李",20,"天津大学","大一");
            System.out.println(student.getInfo());
        }
    
    }

    输出结果:

    满足方法覆盖的原则:

      方法覆盖只存在于子类和父类之间(包括直接父类和间接父类)

      子类方法签名和返回值类型必须和父类一致(访问权限必须是大于等于父类的访问权限)

      父类的静态方法是不能被子类覆盖为非静态方法

      父类的非静态方法也不能被子类覆盖为静态方法

      父类的私有方法不能被子类覆盖


    final

    含义是最终的,final修饰变量时,表示该变量是常量,其值不可再变化

    final修饰方法,表示该方法为终极方法,可以重载,但不能被子类重写,

    final修饰类,表示该类是最终类,不可被继承

    修饰变量是final用的最多的地方

    1,修饰基本数据类型变量,其数值在初始化后不能更改

    2,修饰引用数据类型变量,则在初始化后不能再指向另一个对象,但能修改原引用对象的属性值

    package finaldemo;
    
    public class Demo {
        public final double PI=3.14;
        public final int[] arr= {1,2,3};
        public final String str = "Welcome to Java";
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Demo demo = new Demo();
            demo.PI=3.14159;               //error
            demo.arr=new int[5];           //error
               demo.arr[2]=4;                 //right
            demo.str="that's a error!";    //error
            System.out.println(demo.PI);
            for(int i=0;i<3;i++) {
                System.out.print(demo.arr[i]+" ");
            }
            System.out.println();
            System.out.println(demo.str);
    
        }
    
    }

    对象转型

    除了基础数据类型的转型之外,对象领域里面也有对象之间的转型

    分为两种:向上转型:父类类型引用指向子类对象

    向下转型:父类类型的引用变量强制转化成子类类型

    向上:父类类型 父类引用变量 = new 子类类型();

       Person p = new Student();

    系统自动完成,父类引用变量可以调用被子类重写的所有方法,但子类独有方法不可用

    向下:

    子类类型 子类引用变量 =(父类类型) 父类引用变量      //必须要有继承关系

     使用instanceof运算符来检测一个对象是否是一个类的实例

    //package Demo2 下
    //Animal.java
    package Demo2;
    
    public class Animal {
        public Animal(String name) {
            super();
            this.name = name;
        }
    
        String name;
        
    }
    
    //Cat.java
    package Demo2;
    
    public class Cat extends Animal {
        String eyeColor;
        public Cat(String name,String eyeColor) {
            super(name);
            // TODO Auto-generated constructor stub
            this.eyeColor=eyeColor;
        }
        
    }
    
    //Dog.java
    package Demo2;
    
    public class Dog extends Animal {
        String furColor;
        public Dog(String name,String furColor) {
            super(name);
            // TODO Auto-generated constructor stub
            this.furColor=furColor;
        }
    
    }
    
    //Demo.java
    package Demo2;
    
    public class Demo {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Animal animal = new Animal("animal");
            Cat cat =new Cat("cat","blue");
            Dog dog = new Dog("dog","black");
            
            //判断animal,cat,dog是否为Animal
            System.out.println("animal is Animal? "+ (animal instanceof Animal));
            System.out.println("cat is Animal? "+ (cat instanceof Animal));
            System.out.println("dog is Animal? "+ (dog instanceof Animal));
            
            animal=dog;
            System.out.println(animal.name);
            System.out.println("animal is Dog? "+ (animal instanceof Dog));
        }
    
    }

    输出结果:


    好累·········

  • 相关阅读:
    CSP-S2019游记
    SOJ 一句话题解整理
    CF547E Mike and Friends
    CF506E Mr. Kitayuta's Gift
    在windows环境下安装和使用Python(CPython)
    GeekGame2020_部分WriteUp
    php通过curl传输JSON对象
    Invalid datetime format: 1292 Incorrect datetime value
    解决 select2 开启 tags 不能输入中文的问题
    electerm 设置同步(Setting sync)
  • 原文地址:https://www.cnblogs.com/tkj521Ya/p/11243012.html
Copyright © 2011-2022 走看看