java基础二

2019-08-09 00:00:00 java 基础

泛型:

也就是装在集合当中的所有元素,全部都是统一的什么类型。

泛型只能是引用类型,不能是基本类型。

关于引用类型与基本类型的区别::https://blog.csdn.net/qq_31071255/article/details/82192075

在使用==时,对于基本类型来说,==是进行数值的比较,对于引用类型来说,==是进行地址值的比较

 

从jdk1.5+开始支持,自动装箱和自动拆箱

自动装箱:基本类型 —–》 自动变成引用类型,,,包装类型

自动拆箱:包装类型——》 基本类型

String的构造方法和直接创建

public string()

public String(char[] array)

public String(byte[] array)

 

覆盖重写,@override,写在方法前面,检测是不是有效的覆盖重写,这个注解不写,只要满足条件也是覆盖重写,相当于是个检测手段,子类方

法的返回值,必须小于等于父类方法的返回值范围

 

JAVA中的接口

1、成员变量其实是常量,格式

【public】【 static】【 final】  数据类型  常量名 =数据值

注意:常量必须进行赋值,而且一旦赋值就不能改变,常量名必须大写,用下划线进行分割

 

2、接口中的抽象方法

    【public】【 abstract】 返回值类型 方法名称(参数列表);

注意,实现类必须覆盖重写接口所有的抽象方法

 

3、从JAVA8开始接口允许定义默认方法,格式

【public】 default 返回值类型 方法名称(参数列表)(方法体)

 

4、从JAVA8开始接口允许定义静态方法,格式

【public】 static 返回值类型 方法名称(参数列表){方法体}

注意:应该通过接口名称进行调用,不能通过实现类对象调用接口静态方法

 

5、从Java9开始,接口里允许定义私有方法,格式

普通私有方法 private 返回值类型 方法名称(参数列表){方法体}

静态私有方法 private static 返回值类型 方法名称(参数列表){方法体}

注意:private的方法只有接口自己才能调用,不能被实现类或别人使用。

 

JAVA中的抽象类

抽象类就是为了继承而存在

如果父类当中的方法不确定如何进行{}方法体的是实现,那么这就应该是一个抽象方法

1、不能直接创建抽象类对象,用一个子类来继承抽象类

2、子类必须实现(覆盖重写)抽象类中的抽象方法

3、创建子类进行使用

注意事项:

1、抽象类不能直接创建对象

2、抽象类中可以有构造方法,是供子类创建对象时,初始化父类成员使用的,理解:子类的构造方法中,有默认的super(),需要访问父类构造方法

3、抽象类中,不一定包含抽象方法也可以有普通方法也可以什么也没有(适配器模式),但是有抽象方法的类必须是抽象类

4、抽象类的子类,必须重写抽象父类中所有的抽象方法,除非该子类也是抽象类

 

抽象类与普通类的区别

 

  包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别:

 

 1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。

 

 2)抽象类不能用来创建对象;

 

 3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

 

 在其他方面,抽象类和普通的类并没有区别。

 

 

 

 

抽象类和接口有什么区别呢

 

 

 

1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;

 

2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;

 

3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;

 

4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。

 

 

 

 

我们看个网上流传很广的例子:门和报警

门都有open和close的动作我们可以用抽象类和接口来定义这个抽象的概念

 

public abstract class Door {
    public abstract void open();
    public abstract void close();
}

public interface Door {
    void open();
    void close();
}

 

现在门有了打开和关闭的功能,现在我们需要增加一个报警的功能,那么该如何实现

两种思路:

1、将三个功能放在抽象类中,但是这样一来所有继承于这个抽象类的子类都具备了报警的功能,但是所有的门又不一定都有报警的功能

2、将三个功能都放在接口里面,需要用到报警功能的类就需要实现这个接口中的报警功能,但是也许这个类根本不需要open和close方法,必须火灾报警器

从上面可以看出,door的open、close和alarm根本就属于两种不同的范畴内的行为,open和close属于,门的特性,而报警属于延伸功能

因此最好的办法是单独将报警设计为一个接口,包含alarm的行为,Door单独设计为一个抽象类,包含close和open两种行为,再设计一个

报警门,继承Door类和实现Alarm接口

public interface Alarm{
    void alarm();
}

public abstract class Door{
    void open();
    void close();
}

public class AlarmDoor extends Door implements Alarm{
    void open(){
    }
    void close(){
    }
    void alarm(){
    }
}

 

 

 

 部分内容转载:https://www.cnblogs.com/xiaoxi/p/6599843.html

相关文章