java基础第八天

抽象类

抽象类的定义

抽象类是一个半成品,所谓的半成品就是不能直接使用的产品,必须经过下一步的加工,把扮成平加工成一个完整的产品。Java语言里面的抽象类就是一个半成品,它半成品主要体现在里面可以含有抽象方法,抽象方法是一个没有方法体的方法,方法的具体实现不知道,必须对方法体进行进一步的实现,才能使用该抽象类;抽象类不能实例化,原因是里里面拥有抽象方法,所以抽象类必须被子类继承,否则将是一个无用的产品。

抽象类的语法格式

Java语言里的抽象和普通类不一样,该类使用abstract关键字修饰,使用abstract关键字修饰的类叫做抽象类。

抽象方法

抽象方法就是没有方法体的方法,必须使用abstract关键字修饰,使用abstract修饰的方法就是抽象方法,该方法没有方法体;方法体必须通过子类来实现。
抽象类格式:
public abstract class 类名{
//若干静态方法
//若干抽象方法
//抽干普通实例方法
//若干属性
}

抽象方法的格式:
public abstract void 方法名称(参数表);

抽象类与普通类的区别

从类的修饰符层面来说,抽象类比普通的类多了一个abstract关键字修饰符。从方法层面来说,抽象类比普通类多了可以含有抽象方法。普通能有的属性,方法抽象类都有;抽象 类不能实例化。

抽象方法与普通方法的区别

最大的区别就是抽象方法必须使用abstract关键字修饰,并且 没有方法体。

局部变量和全局变量

我们可以方法里面的变量全部都是局部变量,方法以外的变量就是全局变量。
比如:
pbulic void msg(int x,int y){
int c= x+y;
System.out.println©;
}

常量

所谓的常量就是变量在运算的过程中,一直不会改变的量(指的是变量值),常量不能被第二次赋值,必须被final修饰。

final关键字的使用:
1、如果final修饰类,那么该类没有子类(就是不能被子类继承)
2、如果final修饰方法,那么该方法不能被子类重写
3、如果final修饰变量,那么该变量不能被第二次赋值

java语言里里面常量的书写方式:

public static final int PARAM = 5;

修饰符一般使用 public static fianl 常量名必须大写;
public static final String MSG = “hello”;

补充: 如果父类的某一个方法想要设置为子类可以重写,那么父类的方法的权限修饰符
推荐使用 protected;

权限修饰符

在这里插入图片描述

导包

导包:如果一个类和正在使用的类不在同一个包下,那么必须进行导包操作,导包使用 import关键字
比如导入java.util.Random包
import java.util.Raomdom;
可以导入某一个包下面的所有类,使用*
import java.uitl.* 表示导入java.uitl.包下面的所有类
   idea导包的快捷键:Alt+Enter提示导入相应的包
当然还有一个关于包的关键字叫做 package表示指定某一个类的包

接口

接口(硬件类接口)是指同一计算机不同功能层之间的通信规则称为接口。 [1]
接口(软件类接口)是指对协定进行定义的引用类型。其他类型实现接口,以保证它们支持某些操作。接口指定必须由类提供的成员或实现它的其他接口。与类相似,接口可以包含方法、属性、索引器和事件作为成员。

接口: 接口是一个公共的标准,是用于向外界提供约束和标准的一个准则。

 Java语言里面的接口,接口使用关键字interface修饰。子类实现接口使用implements关键字,在JDK1.8之前接口里面之后抽象方法和常量。记住接口里面的方法全部是抽象方法,所有的变量全部是常量。
JDK1.8之后,接口里面可以含有静态方法,默认方法,以及函数式接口。
格式:
public interface 接口名称{
若干抽象方法
若干常量
若杠静态方法(1.8以后)
若干默认方法(1.8以后,只能通过子类的实例去调用)
}
子类实现某一个接口如下:
class A implements B,C{
    //实现接口里面的所有抽象方法
}
java语言的类只支持单继承,但是接口可以支持多继承。接口和接口之间可以继承
A extends B  但是类实现接口必须使用 implents关键字去实现某一个接口。

类型转换

   判断某一个对象是否式某一个类的实例,使用 instanceof 关键字,比如
   A instanceof 类B,如果对象A是类B的实例,那么A instanceof 类B 的结果就为true
   一般要求A 和B之间有继承关系,A instanceof 类B 的结果才为true.

枚举类

枚举的概念:就是把一种事物所有的可能出现的形式通通的全部列举出来。比如周一到周天(这是
有限的而且确切的值,所以可以考虑使用枚举),类似的还有 四季(春,夏,秋,东)

Java 语言的枚举类格式:
public enum 枚举类类名{

}
注意:枚举类的每一个对象都是常量

内部类

在类里面写类,叫做内部类,内部类可以把器当成是外部类的成员变量来看待,同样可以使用
Java面向对象的语法规则去研究。
内部类分为3种:
1、匿名内部类 
    匿名内部类表示一个没有名字的子类(记住是一个子类),该类的实例一般只使用在一个地方。
2、静态内部类
3、非静态内部类

函数式接口

  函数式接口的定义:
    Java语言里面接口里面只有一个抽象方法的接口叫做函数式接口。函数式接口通常可以使用@FuncationInterface注解修饰,表示该接口是一个函数式接口。函数式 接口可以支持lamada表达式创建对象。
public static void main(String[] args) {
        /**
         * 由于T1是一个函数式接口,所以支持lamada表达式创建接口的子类对象
         * lamada表达式:
         *    步骤:
         *    1、首先写方法的参数表(如果参数表只有一个参数,那么圆括号()可以省略)
         *    2、写->
         *    3、写{}  (如果方法体的实现只有一行代码,那么或括号{}可以省略,如果
         *    函数式接口的抽象方法代返回值,当方法实现的时候,如果只有一行代码,方法
         *    会将这一行的运行结果返回,不用显示使用return关键字返回,但是当
         *    有多行代码的时候,必须使用return关键字返回对应类型的值)
         *    4、在{}号里面写方法的实现
         */
        T1 tt = new T1() {
            @Override
            public void msg() {
                System.out.println("我是函数式接口T1的子类(是一个匿名内部类)");
            }
        };
        tt.msg();
        T1 t1 = () -> {
            System.out.println("我是函数式接口T1的方法体(通过lamada表达式创建子类的对象)");
        };
        /**
         * 如果函数式接口的抽象方法的参数表只有一个参数,那么圆括号()可以省略
         */
        T2 t2 = e ->{
            System.out.println("我是函数式接口的只有一个参数的抽象方法的实现");
        };
        t2.msg(4);
        T3 t3 = (e,f)->{
            System.out.println("我是函数式接口的两个个参数的抽象方法的实现,lamada表达式不能省略()号");
        };
         t3.msg(1,2);
        T4 t4 = (e,f)->{
            int c = e+f;
            return  c;
        };
        T4 t41 = (e,f) -> e+f*2;
        System.out.println(t41.msg(1,2));
    }
发布了31 篇原创文章 · 获赞 12 · 访问量 4114

猜你喜欢

转载自blog.csdn.net/qq_21098263/article/details/104422517