zoukankan      html  css  js  c++  java
  • 2019-05-25 java学习日记

    面向对象this和 super的区别与应用

    this:代表当前对象的引用,谁来调用我,我就代表谁super:代表当前对象父类的引用

    this即可调用本类的,也可调用父类的,不过要在本类没有的情况下才能调用

    this和super的使用区别

    调用成员变量

    this.成员变量  调用本类的成员变量,也可以调用父类的成员变量
    super.成员变量 调用父类的成员变量

    调用构造方法

    this(...) 调用本类的构造方法
    super(...) 调用父类的构造方法

    c:调用成员方法

    this.成员方法  调用本类的成员方法,也可以调用父类的成员方法
    super.成员方法 调用父类的成员方法

    注:

    系统会默认给空参构造 ,也会默认给super();语句,
    子类中所有的构造方法默认都会访问父类中的空参构造方法。
    因为子类会继承父类的数据,可能还会使用父类的数据,
    所以子类初始化之前一定要先完成父类数据化的初始化,
    其实每一个构造方法的第一条语句默认都是:super() object类是最顶层的父类 。

    this和super只能存在一个,super(...)或者this(...)必须出现在构造方法的第一条语句上。

     1 class Demo_extends {
     2     public static void main(String[] args) {
     3         Son s1 = new Son();
     4         System.out.println("姓名:" + s1.getName() + ",年龄:" + s1.getAge());
     5         System.out.println("---------------");
     6         Son s2 = new Son("张三",23);
     7         System.out.println(s2.getName() + "..." + s2.getAge());
     8     }
     9 }
    10 
    11 class Father {
    12     private String name;                    //姓名
    13     private int age;                        //年龄
    14 
    15     public Father() {                    //空参构造
    16         System.out.println("这是一个空参构造");
    17     }
    18     public  Father(String name,int age ) {        //有参构造
    19         this.name = name;
    20         this.age = age;
    21         System.out.println("这是一个有参构造");        
    22     }
    23 
    24     public void setName (String name) {        //设置姓名
    25         this.name = name;
    26     }
    27     public String getName () {                //获取姓名
    28         return name;
    29     }
    30 
    31     public void setage (int age) {            //设置年龄
    32         this.age = age;
    33     }
    34     public int getAge () {                    //获取年龄
    35         return age;
    36     }
    37 }
    38 
    39 class Son extends Father{
    40     public  Son() {                        //空参构造 
    41         this("王五",26);                    //本类中的构造方法
    42         //super();                        //调用父类中的构造方法        
    43         System.out.println("这是一个空参构造");                
    44     }
    45     public  Son(String name,int age) {        //有参构造
    46         super(name,age);
    47         System.out.println("这是一个有参构造");
    48     }
    49     
    50 }
    例子

     

    方法重写的概述与应用

    当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,
    这样即沿袭了父类的功能,又定义了子类特有的内容。

    例子

     1 class Demo7_Phone {
     2   public static void main(String[] args) {
     3     Ios8 i = new Ios8();
     4     i.siri();
     5     i.call();
     6   }
     7 }
     8 
     9 class Ios7 {
    10 public void call() {
    11 System.out.println("打电话");
    12 }
    13 
    14 public void siri() {
    15 System.out.println("speak English");
    16 }
    17 }
    18 
    19 class Ios8 extends Ios7 {
    20 public void siri() {
    21 
    22 System.out.println("说中文");
    23 super.siri();
    24 }
    25 }

     

    方法重写Override的注意事项

    1,父类中私有方法不能被重写,
    因为父类私有方法子类根本就无法继承。

    2,子类重写父类方法时,访问权限不能更低,最好一致

    3,父类静态方法,子类也必须通过静态方法进行重写

    这个也算不上方法重写,因为静态只能覆盖静态

    4,子类重写父类方法的时候,最好声明一模一样

    Overload可以改变返回值类型,只看参数例表。

    方法重写:

    子类中出现了和父类中方法声明一模一样的方法。
    与返回值类型有关,返回值是一致(或者是子父类)的。

    方法重载:

    本类中出现的方法名一样,参数列表不同的方法。与返回值类型无关。

    子类对象调用方法的时候:

    先找子类本身,再找父类

    final关键字

    final修饰的特点

    修饰类:类不能被继承
    修饰方法:方法不能被重写
    修饰变量:变量变成常量,只能被赋值一次(一般会与public static共用)

    常量命名规范:如果是一个单词,所以字母大写,如果是多个单词,
    每个单词都大写,中间用下划线隔开。

    final关键字修饰局部变量

    基本类型:是值不能被改变

    引用类型:是地址值不能被改变,对象中的属性可以改变

    final修饰变量的初始化时机:

    1,显示初始化,(成员变量的初始化值是无效的)
    2,在对象构造完毕前即可

  • 相关阅读:
    linux 通配符
    linux 常用快捷键
    datatables-2
    datables
    datatables
    http://blog.csdn.net/heqingsong1/article/details/8540665
    软件提升知识点
    深入浅出单实例Singleton设计模式
    详解js跨域问题
    自定义控件之绘图篇(四):canvas变换与操作
  • 原文地址:https://www.cnblogs.com/Sherwin-liao/p/10922409.html
Copyright © 2011-2022 走看看