美文网首页
3/3day02_final_static_接口

3/3day02_final_static_接口

作者: 蹦蹦跶跶的起床啊 | 来源:发表于2020-03-03 23:28 被阅读0次

回顾(封装,继承)

能够写出类的继承格式
    public class 子类 extends 父类{
        
    }
能够说出Java继承的特点
    a.单继承(一个子类只能有一个父类,一个父类可以有多个子类)
    b.多层继承(一个子类可以有一个父类,该父类也可以有自己的父类)
能够说出子类调用父类的成员特点
    如果子父类中有同名的成员变量/成员方法,根据Java就近原则,优先调用子类自己成员
    如果子父类中不同名的成员变量/成员方法,根据变量或者方法名字调用,不存在歧义
    构造方法,a.父类的构造子类无法继承 b.在子类的任何构造第一行,默认调用父类的无参构造,super()
能够说出方法重写的概念
    方法重载(overload): 在同一个类中,方法名一样的,参数列表不一样
    方法重写(override): 在继承关系中,子类中有一个和父类除了方法体(权限修饰符),其他一模一样的方法
能够说出this可以解决的问题
    在本类中使用:
        this.xxx  访问本类的成员变量
        this.xxx()    调用本类的成员方法
        this(...) 调用本类的其他构造
         
能够说出super可以解决的问题
     在子类中使用:
        super.xxx   访问父类继承的成员变量
        super.xxx() 调用父类继承的成员方法
        super(...)  调用父类构造方法  
描述抽象方法的概念
     抽象方法: 只有方法的声明,没有方法的实现(加上关键字abstract)
     抽象类: 含有抽象方法的类一定是一个抽象类
            如果是一个抽象类,其中不一定含有抽象方法     
写出抽象类的格式
     public abstract class 抽象类名{
        抽象方法
        正常方法    
     }
写出抽象方法的格式
    public abstract void 抽象方法名();
能够说出父类抽象方法的存在意义
    抽象类的意义: 给其他子类继承的,为子类提供模板(模板设计模式)
    抽象方法的意义: 要求子类必须重写(如果不重写,子类还是一个抽象类)    

今日内容

  • final关键字
  • static
  • 接口

今日思维导图


final 关键字(被final修饰的变量名一般都是全大写并且用下划线相隔)

final和abstract关键字冲突,被final修饰的类天生做子类, 被abstract修饰的类,天生做父类

使用方式

  • 修饰类 (不能修饰抽象类)

被final修饰的类, 不能做父类

  • 修饰方法 (不能修饰抽象方法)

被fina修饰的方法, 不能被重写

  • 修饰变量

1.修饰局部变量- 基本类型
被final修饰的基本类型变量, 该变量只能赋值一次

2.修饰局部变量- 引用类型
被final修饰的引用类型变量, 该变量中保存的地址值只要被赋值一次,就不能再更改
如下代码:

 final Dog d = new Dog();//此 d 中保存有创建对象的地址值
d.age = 20;//不报错, 没有改变变量 d 的赋值
d.name = "旺财";  //不报错, 没有改变变量 d 的赋值
 d = new Dog()//报错, 被final修饰的 d 在创建对象的时候就已经保存了地址值, 无法重新赋值新的地址值

3.修饰成员变量
被final的成员变量, 必须进行赋值且只能赋值一次
赋值有两种方式
a.定义赋值
b.构造方法中给该成员变量赋值
final 修饰的成员变量, 必须在创建对象之前有值

static

概述

类变量/静态变量

使用 static关键字修饰的成员变量。
static是静态修饰符,一般修饰成员变量/成员方法.被修饰的成员称之为静态成员/类成员
被 static 修饰的成员, 不属于任何一个对象, 属于整个类, 被所有对象共享
每次创建一个对象时候, 被static 修饰的成员变量不会出现在这个对象内部, 但是可以被该对象使用

只要类加载到方法区中, 被静态修饰的成员变量就已经出现在方法区里的静态区中

类方法/静态方法

静态方法也叫类方法, 由static修饰的方法
直接通过类名可以直接调用.无需通过对象调用

静态与非静态之间的相互访问

静态成员变量
静态成员方法
与类是同级, 只要类加载到内存, 静态的成员变量/成员方法就存在(对象不一定存在)

非静态成员变量
非静态成员方法
必须创建对象之后才能访问/调用
静态出现的比非静态的早

  • 静态方法调用的注意事项:
    1.静态方法可以直接访问类变量和静态方法。
    2.静态方法不能直接访问普通成员变量或成员方法。成员方法可以直接访问类变量或静态方法。
    3.静态方法中,不能使用this关键字。
    静态方法只能访问静态成员。静态方法没有重写这种概念. 子类和父类有 相同方法的时候 称之为隐藏

建议调用格式

静态成员变量
对象名.静态成员变量 [可以访问,但是不建议]
类名.静态成员变量 [建议的方式]
静态的成员方法
对象名.静态成员方法 [可以访问,但是不建议]
类名.静态成员方法 [建议的方式]

接口(重要)

概述(所有基本都是public)

  • 什么是接口:(和类是同级的)
    是一种引用类型, 接口是方法的集合(接口中主要写方法,而类中除了方法还有成员变量等)

  • 定义格式
    定义类: class
    定义接口: interface
    定义枚举: enum
    定义注解: @interface

格式:

public interface 接口名{
        //抽象方法[JDK7]
        //默认方法和静态方法[JDK8]
        //私有方法和私有静态方法[JDK9]
}

接口中的方法默认用public修饰, 所以可以省去
1.(抽象方法)只有接口中的抽象方法 可以省略关键字 public abstract
2.(默认方法)接口中不允许有正常方法,默认方法修饰为 default
3.(静态方法)使用关键字 static

接口的使用

1.和抽象类相似, 不能创建对象
2.接口也是作为 父接口 使用, 用于被其他类"实现"的(实现类似于继承)
3.继承 使用关键字 extends. 实现 使用关键字 implements
使用方式:

public class 实现类 implements 接口{

}

注意
1.实现类中必须重写所有接口中的抽象方法
2.可以选择性重写默认方法, 如果重写,把重写方法中就不能再加default关键字
3.静态方法通过类名/接口名直接调用, 没有重写这种说法

接口的多实现

  • 格式
public class 实现类 implements 接口1,接口2,..{

}
  • 接口中不同方法,在实现类中的操作
    1.抽象方法
    接口中,有多个抽象方法时,实现类必须重写所有抽象方法。如果抽象方法有重名的,只需要重写一次
    2.默认方法
    接口中,有多个默认方法时,实现类都可继承使用。如果默认方法有重名的,必须重写一次。
    3.静态方法
    接口中,存在同名的静态方法并不会冲突,原因是只能通过各自接口名访问静态方法。

  • 实现和继承的优先级问题
    一个类 可以在继承一个父类的同时,实现多个接口
    格式

public class 子类/实现类 extends 父类 implements 接口1,接口2{

}

继承的优先级高于实现.

先 extends 再 implements

如果父类正常方法和接口类中默认方法重名了, 子类/实现类中不用重写该方法, 会根据优先级调用父类中正常方法. 如果在子类中重写了, 那么在测试类中通过子类对象会优先调用子类方法

接口的多继承(了解)

类和类之间:单继承
类和接口之间:多实现
接口和接口之间:多继承
接口和接口之间格式如下:

public interface MyInter extents Inter1,Inter2{
  //MyInter 接口保护了Inter2接口的所有东西
}

接口中其他成员特点

  • 接口中,无法定义成员变量,但是可以定义常量(字面值常量)或其值不可以改变,默认使用public static final修饰(可省略,但是具有)。
public static final 数据类型 常量名(大写下划线隔开) = 常量值;
  • 接口中,没有构造方法,不能创建对象。
  • 接口中,没有静态代码块。

相关文章

网友评论

      本文标题:3/3day02_final_static_接口

      本文链接:https://www.haomeiwen.com/subject/gdbflhtx.html