常量(这里的常量指的是实例常量:即成员变量)赋值:

①在初始化的时候通过显式声明赋值。Final int x=3;

②在构造的时候赋值。

局部变量可以随时赋值。

 

利用final定义方法:这样的方法为一个不可覆盖的方法。

Public final void print(){};

为了保证方法的一致性(即不被改变),可将方法用final定义。

 

如果在父类中有final定义的方法,那么在子类中继承同一个方法。

 

如果一个方法前有修饰词private或static,则系统会自动在前面加上final。即private和static方法默认均为final方法。

 

注:final并不涉及继承,继承取决于类的修饰符是否为private、default、protected还是public。也就是说,是否继承取决于这个方法对于子类是否可见。

Abstract(抽象)可以修饰类、方法

如果将一个类设置为abstract,则此类必须被继承使用。此类不可生成对象,必须被继承使用。

Abstract可以将子类的共性最大限度的抽取出来,放在父类中,以提高程序的简洁性。

Abstract虽然不能生成对象,但是可以声明,作为编译时类型,但不能作为运行时类型。

Final和abstract永远不会同时出现。

 

当abstract用于修饰方法时,此时该方法为抽象方法,此时方法不需要实现,实现留给子类覆盖,子类覆盖该方法之后方法才能够生效。

 

注意比较:

private void print(){};此语句表示方法的空实现。

Abstract void print(); 此语句表示方法的抽象,无实现。

 

如果一个类中有一个抽象方法,那么这个类一定为一个抽象类。

反之,如果一个类为抽象类,那么其中可能有非抽象的方法。

 

如果让一个非抽象类继承一个含抽象方法的抽象类,则编译时会发生错误。因为当一个非抽象类继承一个抽象方法的时候,本着只有一个类中有一个抽象方法,那么这个类必须为抽象类的原则。这个类必须为抽象类,这与此类为非抽象冲突,所以报错。

 

所以子类的方法必须覆盖父类的抽象方法。方法才能够起作用。

只有将理论被熟练运用在实际的程序设计的过程中之后,才能说理论被完全掌握!

为了实现多态,那么父类必须有定义。而父类并不实现,留给子类去实现。此时可将父类定义成abstract类。如果没有定义抽象的父类,那么编译会出现错误。

 

Abstract和static不能放在一起,否则便会出现错误。(这是因为static不可被覆盖,而abstract为了生效必须被覆盖。)

 

例:(本例已存在\CODING\abstract\TestClass.java文件中)

public class TestClass{

  public static void main(String[] args){

SuperClass sc=new SubClass();

Sc.print();

}

Abstract class SuperClass{

Abstract void print();}

}

class SubClass extends SuperClass(){

  void print(){

System.out.println(“print”);}

}

利用final定义方法:这样的方法为一个不可覆盖的方法。的更多相关文章

  1. 快速提高 Xcode 编译速度的方法(转载自网上一个大神的方法)

    1.,中的 Debug Information Format 的选项中选择 DWARF ,平时调试就是用整个选项,经过测试,速度确实有很大的提升,等发行版本的时候在调回 DWARF with dsYM ...

  2. js new一个对象的过程,实现一个简单的new方法

    对于大部分前端开发者而言,new一个构造函数或类得到对应实例,是非常普遍的操作了.下面的例子中分别通过构造函数与class类实现了一个简单的创建实例的过程. // ES5构造函数 let Parent ...

  3. 第十条:始终要覆盖toString()方法

    Object类提供的toString()方法如下: public String toString() {    return getClass().getName() + "@" ...

  4. 利用Filter和拦截器,将用户信息动态传入Request方法

    前言: 在开发当中,经常会验证用户登录状态和获取用户信息.如果每次都手动调用用户信息查询接口,会非常的繁琐,而且代码冗余.为了提高开发效率,因此就有了今天这篇文章. 思路: 用户请求我们的方法会携带一 ...

  5. final方法,abstract方法和abstract类,native方法

    final方法 1.为了确保某个函数的行为在继承过程中保持不变,并且不能被覆盖(override),可以使用final方法. 2.为了效率上的考虑,将方法声明为final,让编译器对此方法的调用进行优 ...

  6. 【编程题目】题目:定义 Fibonacci 数列 输入 n,用最快的方法求该数列的第 n 项。

    第 19 题(数组.递归):题目:定义 Fibonacci 数列如下:/ 0 n=0f(n)= 1 n=1/ f(n-1)+f(n-2) n=2输入 n,用最快的方法求该数列的第 n 项. 思路:递归 ...

  7. Java TreeSet集合排序 && 定义一个类实现Comparator接口,覆盖compare方法 && 按照字符串长度排序

    package TreeSetTest; import java.util.Iterator; import java.util.TreeSet; import javax.management.Ru ...

  8. 创建对象_工厂方法(Factory Method)模式 与 静态工厂方法

      工厂方法模式:   定义:为创建对象定义一个接口,让子类决定实例化哪个类.工厂方法让一个类的实例化延迟至子类.   应用场景: 客户类不关心使用哪个具体类,只关心该接口所提供的功能: 创建过程比较 ...

  9. 指针直接赋值为整型AND利用宏定义求结构体成员偏移量

    首先我们要更正一个很熟悉的概念,那就是指针不仅仅是“地址”,指针还有一个很重要的特性,那就是“类型”. 指针初始化时,“=”的右操作数; 除外,该语句表示指针为空): 所以 ; 这样的代码是不允许的. ...

随机推荐

  1. 潭州课堂25班:Ph201805201 django框架 第十一课 保持登录,注册,登录 (课堂笔记)

    保持登录 在 django 中的内置 sessions 在项目的主目录中的配置文件 在数据库中 在视图函数中写登录 在页面登录后会出现 查看数据库内容 这样就实现保持登录 退出登录 注册: 1,创建模 ...

  2. Systick时钟定时

    主函数 /* Note:Your choice is C IDE */ #include "stdio.h" #include "led.h" void mai ...

  3. DJI-A2调参详细教程

    DJI-A2飞控系统用户手册 https://wenku.baidu.com/view/bb632f88227916888586d749.html DJI-A2调参软件视频教程 http://www. ...

  4. BZOJ2872 : 优莱卡

    $A$类数据:直接输出$B[l]$,$O(n+m)$.$B$类数据:ST表求区间最小值,$O(n\log n+m)$.$C$类数据:可持久线段树求区间$k$小值,$O((n+m)\log n)$.剩下 ...

  5. Java中的public、private、protected,函数修饰符

    1.public:public表明该数据成员.成员函数是对所有用户开放的,项目中其他脚本都可以直接进行调用 2.private:private表示私有,私有的意思就是除了脚本之外,项目中其他类都不可以 ...

  6. PAT Basic 1006

    1006 换个格式输出整数 (15 分) 让我们用字母 B 来表示“百”.字母 S 表示“十”,用 12...n 来表示不为零的个位数字 n(<10),换个格式来输出任一个不超过 3 位的正整数 ...

  7. 俄罗斯方块Ai AlphaTetris讲稿

    相关下载地址: 链接: https://pan.baidu.com/s/1LqFWMoLzaKkuahwnZNIsZg 密码: 3ybi

  8. JS_高程4.变量,作用域和内存问题(2)执行环境及作用域

    1.执行环境:执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为, 每个执行环境都有一个与之相关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中. 2.全局执行环境: 最外围的 ...

  9. JS自学笔记05

    JS自学笔记05 1.例题 产生随机的16进制颜色 function getColor(){ var str="#"; var arr=["0","1 ...

  10. openstack之~glance安装部署

    接着部署完keystone后,接着部署glance 第一:部署安装glance glance关于数据库的操作: [root@controller /]# mysql -u root -p Enter ...