• 19.10.13


    //1.构造方法
    在想直接通过在创建实例的时候赋予字段属性,
    那么就必须使用构造方法了,有无参构造方法和有参构造方法
    平时,如果我们没有写构造方法,编译器系统会默认为我们添加无参构造方法
    也可以同时,写无参构造方法和有参构造方法
    方法名与类名相同并且是大写开头的(注意)
    没有返回值(即没有void)
    
    Java中先创建实例时:
    <1>首先初始化实例
    <2>然后执行构造方法的代码进行初始化
    
    多个构造方法在:
    可以在类里面编写多个构造方法
    会自己帮我们匹配使用哪个构造方法
    一个构造方法可以调用其他构造方法,这样做的目的是便于代码复用。
    调用其他构造方法的语法是this(…):
    class Person {
        private String name;
        private int age;
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public Person(String name) {
            this(name, 18); // 调用另一个构造方法Person(String, int)
        }
    
        public Person() {
            this("Unnamed"); // 调用另一个构造方法Person(String)
        }
    }
    
    //2.关于class类????
    是不是一个.java文件里面只有一个public类,并且文件名要与这个类名相同
    但是,可以有多其他的类,只要类名不是带有public即可,这点似乎可以证实的
    
    //3.方法重载(overload)
    是指同一个类里面的可以有多个名字相同的方法
    方法重载的返回值类型通常都是相同的
    应该具有类似的功能
    
    //4.继承extends
    通过继承只需要编写额外的代码
    在OOP的术语中,我们把Person称为
    超类(super class),父类(parent class),基类(base class),
    把Student称为子类(subclass),扩展类(extended class)。
    
    Java中只允许一个class类继承一个父类(即有且只有一个父类)
    只有Object特殊,它没有父类。
    
    继承有个特点就是子类无法访问父类的私有属性和私有方法
    如果子类想法访问父类的私有属性,可以将private改成protected
    即只可以在继承树类进行访问
    
    **super关键字:**重点记忆理解
    用来访问父类的字段
    特别是在构造方法的时候
    这是因为在Java中,任何class的构造方法,
    第一行语句必须是调用父类的构造方法。
    如果没有明确地调用父类的构造方法,编译器会帮我们自动加一句super();
    如果父类没有默认的构造方法,子类就必须显式调用super()
    并给出参数以便让编译器定位到父类的一个合适的构造方法。
    这里还顺带引出了另一个问题:
    即子类不会继承任何父类的构造方法。
    子类默认的构造方法是编译器自动生成的,不是继承的。
    
    向上转型
    这种把一个子类类型安全地变为父类类型的赋值,被称为向上转型(upcasting)。
    Person p = new Student()
    一个疑问??就是Student的新属性,p还可以使用吗??
    可以,这些方法都是新添加上去的
    
    向下转型
    和向上转型相反,如果把一个父类类型强制转型为子类类型,就是向下转型(downcasting)。
    如果转化类型不同,也就是所谓的不兼容,就会报错ClassCastException
    但是Java提供instanceof 用于判断类型
    instanceof实际上判断一个变量所指向的实例是否是指定类型,
    或者这个类型的子类。如果一个引用变量为null,
    那么对任何instanceof的判断都为false。
    利用instanceof,在向下转型前可以先判断:
    Person p = new Student();
    if (p instanceof Student) {
        // 只有判断成功才会向下转型:
        Student s = (Student) p; // 一定会成功
    }
    
    区分继承和组合的关系
    具有has关系不应该使用继承,而是使用组合,即Student可以持有一个Book实例:
    class Student extends Person {
        protected Book book;
        protected int score;
    }
    继承是is关系,has是组合关系
    
    //5.多态
    在继承关系中,如果子类定义一个与父类**完全相同**的方法名的方法,
    那么就叫覆写override
    方法名相同,方法参数相同,但方法返回值不同,也是不同的方法。
    在Java程序中,出现这种情况,编译器会报错。
    
    Java的实例方法调用是基于运行时的实际类型的动态调用,而非变量的声明类型。
    这个非常重要的特性在面向对象编程中称之为多态。
    它的英文拼写非常复杂:Polymorphic。
    
    多态的特性就是,运行期才能动态决定调用的子类方法。
    多态具有一个非常强大的功能,就是允许添加更多类型的子类实现功能扩展,
    却不需要修改基于父类的代码。
    
    覆写Object方法
    因为所有的class最终都继承自Object,而Object定义了几个重要的方法:
    toString():把instance输出为String;
    equals():判断两个instance是否逻辑相等;
    hashCode():计算一个instance的哈希值。
    
    调用super
    在子类的覆写方法中,如果要调用父类的被覆写的方法,可以通过super来调用。
    
    final
    继承可以允许子类覆写父类的方法。如果一个父类不允许子类对它的某个方法进行覆写,
    可以把该方法标记为final。用final修饰的方法不能被Override
    class Person {
        protected String name;
        public final String hello() {
            return "Hello, " + name;
        }
    }
    
    class Student extends Person {
        // compile error: 不允许覆写
        @Override
        public String hello() {
        }
    }
    同样,类也是可以使用这个关键词修饰,修饰之后不可以被继承
    字段被修饰并初始化后,不可以被修改。
    
    //6.抽象方法、类
    通过abstract定义的方法是抽象方法,它只有定义,没有实现。
    抽象方法定义了子类必须实现的接口规范;
    定义了抽象方法的class必须被定义为抽象类,从抽象类继承的子类必须实现抽象方法;
    如果不实现抽象方法,则该子类仍是一个抽象类;
    面向抽象编程使得调用者只关心抽象方法的定义,不关心子类的具体实现。
    
    //7.接口
    如果一个抽象类里面全是抽象方法,没有字段即属性
    那么就可以把抽象类改为接口即abstract改为interface
    abstract class Person {
        public abstract void run();
        public abstract String getName();
    }
    改为
    interface Person {
        void run();
        String getName();
    }
    一个类可以继承多个interface接口,使用implements关键词继承
    因为接口定义的所有方法默认都是public abstract的,
    所以这两个修饰符不需要写出来(写不写效果都一样)
    
    
    接口继承
    一个interface可以继承自另一个interface。
    interface继承自interface使用extends,它相当于扩展了接口的方法。
    这个里面就不需要覆写父接口的方法,因为是平级关系,就和普通的继承一样
    
    default方法(JDK>=1.8)
    就是在接口的方法前面加上default关键字
    实现类可以不必覆写default方法,就是方便接口添加新方法的时候,子类不用修改覆写
    default方法和抽象类的普通方法是有所不同的。因为interface没有字段,
    default方法无法访问字段,而抽象类的普通方法可以访问实例字段。
    
    //8.静态字段和静态方法
    一般通过类名直接访问
    静态字段属于所有实例“共享”的字段,实际上是属于class的字段;
    调用静态方法不需要实例,无法访问this,但可以访问静态字段和其他静态方法;
    静态方法常用于工具类和辅助方法。
    
    接口的静态字段
    因为interface是一个纯抽象类,所以它不能定义实例字段。
    但是,interface是可以有静态字段的,并且静态字段必须为final类型:
    实际上,因为interface的字段只能是public static final类型,
    所以我们可以把这些修饰符都去掉,
    编译器会自动把该字段变为public static final类型。
    
    作者:睿晞
    身处这个阶段的时候,一定要好好珍惜,这是我们唯一能做的,求学,钻研,为人,处事,交友……无一不是如此。
    劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。
    曾有一个业界大牛说过这样一段话,送给大家:   “华人在计算机视觉领域的研究水平越来越高,这是非常振奋人心的事。我们中国错过了工业革命,错过了电气革命,信息革命也只是跟随状态。但人工智能的革命,我们跟世界上的领先国家是并肩往前跑的。能身处这个时代浪潮之中,做一番伟大的事业,经常激动的夜不能寐。”
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    OpenACC 数据管理语句
    OpenACC 简单的直方图
    OpenACC 书上的范例代码(Jacobi 迭代),part 2
    OpenACC 书上的范例代码(Jacobi 迭代),part 1
    OpenACC parallel
    OpenCL 归约 1
    OpenCL 双调排序 GPU 版
    OpenCL 双调排序 CPU 版
    OpenCL 图像卷积 3 使用 CPU
    中括号记法
  • 原文地址:https://www.cnblogs.com/tsruixi/p/11767845.html
Copyright © 2020-2023  润新知