java高级类特性有哪些_Java中高级类的特性

一、抽象类

1、为什么使用抽象类

类用于描述现实生活中的一类事物,类中有属性,有方法,,方法都有方法体

某种情况下,父类只能知道子类应该具有一个怎样的方法,但是不能明确知道子类如何实现该方法

eg:几何图形(多态联系),所有几何图形都应该具备计算面积的功能,但是不同几何图形的计算面积的方式不同

java 为上述问题提供了相应的解决办法

java 允许父类中只提供了一个方法的声明,不提供具体的实现,具体的实现交给子类来完成

该方法称为“ 抽象方法”,拥有一个或多个抽象方法的类,称为“抽象类”

2、如何使用抽象:abstract

1)使用 abstract 修饰的类称为“抽象类”

①格式:访问控制修饰符 abstract class 类名{}

②拥有一个或多个抽象方法的类必须是抽象类

③抽象类中可以有非抽象方法,抽象类中可以没有抽象方法

④**抽象类不能创建实例

⑤抽象类中可以声明构造器

目的:当子类继承父类后,继承父类中所有的属性和方法,因此子类需要知道父类是如何进行初始化的

2)使用 abstract 修饰的方法称为 “抽象方法”

①格式:访问控制修饰符 abstract 返回值类型 方法名(参数列表);

②子类继承父类后,若重写了父类中“所有”的方法,该类是具体类,可以创建实例

③子类继承父类后,若没有重写父类中“所有”的方法,该类必须是抽象类,不可以创建实例

abstract class Pserson{

private String name;

private int age;

public Person(){}

public void setName(String name){

this.name = name

}

//人都应该具备一个说话的功能,但是不同的人说话方式不同

public abstract void speak();

}//Person p = new Person();

3、abstract 关键字的注意

① abstract 和 final 不能同时使用

② abstract 和 static 不能同时使用

③ abstract 和 private 不能同时使用

二、接口

可以定义多个不相关事物的相同功能

1、如何使用接口(如下以 jdk1.7 为标准)

①接口与类是平级的

关键字:interface

eg:public interface Flyer{}

②可以把接口理解为特殊的抽象类,因为 jdk1.7 前接口中只能定义”全局静态变量“和抽象方法

//全局静态变量

int NUM = 100;//public static final

//抽象方法

void fly();//public abstract

③接口中不能有变量,构造器,代码块

④**接口中不能创建实例

⑤接口就是用来被实现的

实现接口关键字:implements

eg:class Bird implements Flyer{}

⑥实现接口的类称为“实现类”,实现类的功能和“继承”一样的,可以继承接口中所有的成员

⑦若实现类实现了接口中所有的抽象方法,该类为具体类,可以创建实例

若实现类没有实现接口中所有的抽象方法,该类必须为抽象类,不可以创建实例

⑧接口可以多实现-----解决了 java 中单继承的局限性

eg:class Bird implements Flyer, Runner{}

⑨一个类可以继承另一个类,同时实现多个接口

eg:

class Bird extends Animal implements Flyer,Runner{}

注意:先继承,后实现

2、jdk1.8 对于接口的升级

(Lambda 表达式需要函数式接口(接口中只有一个抽象方法的接口) 的支持)

①接口中的默认方法

②接口中的静态方法

三、内部类

1、成员内部类

在类中声明另一个类,里面的类称为内部类,外面的类称为外部类

①是类的成员之一,(属性、方法、构造器、代码块)

②可以使用四种访问控制修饰符(public、protected 、default、private)

③可以使用 static 和 final

④与类具有相同的特性

class Person{

private String name;

public Person(){};

public void setName(String name){

this.name = name;

}

public void getName(String name){

return name;

//内部成员类

public class Computer{

private String name;

public Computer(){};

public void setName(String name){

this.name = name;

}

}

//对类的隐藏

private class Head{

}

//静态内部类

static class Mobile{

public void show(){

System.out.println("静态内部类中的方法");

}

}

}

class InnerclassTest{

public static void main(String[] args){

//创建静态内部类对象

Person.Mobile pm = new Person.Mobile();

pm.show();

//创建非静态内部类的对象

Person p = new Person();

Person.Computer pc = p.new Computer();

pc.setName("IBM");

}

}

2、局部内部类

四、枚举类

是 jdk1.5 后出的特性,可以定义有限数量的可穷举数据集

简而言之,当确定一个类有几个对象时,使用枚举

1、自定义枚举

①私有化构造器

②类的内部创建对象

package com.at.java;

//自定义枚举类

public class Season1{

private String seasonName;

private String seasonDesc;

//2.类的内部创建对象

public static final Season1 SPRING = new Season1("春天");

public static final Season1 SUMMER = new Season1("夏天");

public static final Season1 AUTUMN = new Season1("秋天");

public static final Season1 WINTER = new Season1("冬天");

//1.私有化构造器

private Season1(String seasonName, String seasonDesc){

this.seasonName = seasonName;

this.seasonDesc = seasonDesc;

}

//下面是get/set方法和tostring

}

2、使用 enum 关键字

valueOf(String name):根据枚举类对象的名称,获取枚举类对象

value():获取当前枚举类中所有的枚举类对象,组成的数组

public enum Season1{

//2.类的内容创建对象

SRPRING("春天");

SUMMER("夏天");

AUTUMN("秋天");

WINTER("冬天");

}

3、枚举类实现接口

public enum Season1 implements MyInterface{

SPRING{

public void show(){

System.out.println("春天");

}

}

SUMMER{

public void show(){

System.out.println("夏天");

}

}

AUTUMN{

public void show(){

System.out.println("秋天");

}

}

WINTER{

public void show(){

System.out.println("冬天");

}

}

}

五、注解

jdk1.5 后出的特性,是一个元数据,是一个代码级别的说明

String name = "atljs";

1、JDK 内置的常用注释

① @Override:用于注解方法,说明该方法必须是重写方法

② @Deprecated:用于注解属性,方法、类,说明已经过时

③ @SuppressWarnings:用于抑制编译器警告

2、自定义注释

public @interface MyAnnotation{

String value() default "arljs";

}

3、元注解

/*

@Retention:描述注解的生命周期

@Target:描述注解可用于修饰哪些程序元素

@Documented:随之生成说明文档,但注解的生命周期必须是 RUNTIME

@Inherited:被他修饰的 Annotation 将具有继承性

*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值