Java基础22
来源:互联网 发布:sql统计总金额 编辑:程序博客网 时间:2024/04/30 23:45
Java 泛型
关键字说明
- ? 通配符类型
- <? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 T的子类
- <? super T> 表示类型下界(Java Core中叫超类型限定),表示参数化类型是此类型的超类型(父类型),直至Object
- 子类不能继承父类的static成员
- 构造方法不能被继承。
- super 关键字的功能:
- 调用父类中声明为 private 的变量。
- 点取已经覆盖了的方法。
- 作为方法名表示父类构造方法。
- 通过 super 调用父类的隐藏变量,必须要在父类中声明 get方法,因为声明为 private 的数据成员对子类是不可见的。
- 在一个构造方法内只能调用一个构造方法。
- 重写方法的返回类型、方法名称、参数列表必须与原方法的相同。
- 重写方法不能比原方法访问性差(即访问权限不允许缩小)。
- 重写方法不能比原方法抛出更多的异常。
- 被重写的方法不能是final类型,因为final修饰的方法是无法覆盖的。
- 被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
- 被重写的方法不能为static。如果父类中的方法为静态的,而子类中的方法不是静态的,但是两个方法除了这一点外其他都满足覆盖条件,那么会发生编译错误;反之亦然。即使父类和子类中的方法都是静态的,并且满足覆盖条件,但是仍然不会发生覆盖,因为静态方法是在编译的时候把静态方法和类的引用类型进行匹配。
方法的重载:
前面已经对Java方法重载进行了说明,这里再强调一下,Java父类和子类中的方法都会参与重载,例如,父类中有一个方法是 func(){ ... },子类中有一个方法是 func(int i){ ... },就构成了方法的重载。
重写和重载的不同:- 方法重写要求参数列表必须一致,而方法重载要求参数列表必须不一致。
- 方法重写要求返回类型必须一致,方法重载对此没有要求。
- 方法重写只能用于子类重写父类的方法,方法重载用于同一个类中的所有方法(包括从父类中继承而来的方法)。
- 方法重写对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这方面没有任何限制。
- 父类的一个方法只能被子类重写一次,而一个方法可以在所有的类中可以被重载多次。
- 内部类可以访问外部类中的数据,包括私有的数据。
- 内部类可以对同一个包中的其他类隐藏起来。
- 当想要定义一个回调函数且不想编写大量代码时,使用匿名(anonymous)内部类比较便捷。
- 减少类的命名冲突。
- 局部内部类(Local class)是定义在代码块中的类。它们只在定义它们的代码块中是可见的。区分于成员内部类。
局部类有几个重要特性:- 仅在定义了它们的代码块中是可见的;
- 可以使用定义它们的代码块中的任何局部 final 变量;
- 局部类不可以是 static 的,里边也不能定义 static 成员;
- 局部类不可以用 public、private、protected 修饰,只能使用缺省的;
- 局部类可以是 abstract 的。
- 关于抽象类的几点说明:
- 抽象类不能直接使用,必须用子类去实现抽象类,然后使用其子类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例,也就是可以使用抽象类来充当形参,实际实现类作为实参,也就是多态的应用。
- 不能有抽象构造方法或抽象静态方法。
在下列情况下,一个类将成为抽象类:- 当一个类的一个或多个方法是抽象方法时;
- 当类是一个抽象类的子类,并且不能为任何抽象方法提供任何实现细节或方法主体时;
- 当一个类实现一个接口,并且不能为任何抽象方法提供实现细节或方法主体时;注意:
- 这里说的是这些情况下一个类将成为抽象类,没有说抽象类一定会有这些情况。
- 一个典型的错误:抽象类一定包含抽象方法。 但是反过来说“包含抽象方法的类一定是抽象类”就是正确的。
- 事实上,抽象类可以是一个完全正常实现的类
接口必须通过类来实现(implements)它的抽象方法,然后再实例化类。类实现接口的关键字为implements。
如果一个类不能实现该接口的所有抽象方法,那么这个类必须被定义为抽象方法。
不允许创建接口的实例,但允许定义接口类型的引用变量,该变量指向了实现接口的类的实例。
一个类只能继承一个父类,但却可以实现多个接口。
静态代码块、构造代码块,构造方法的执行顺序:
父类静态代码块→子类静态代码块→父类构造代码块→父类构造方法→子类构造代码块→子类构造方法
final是一个关键字,可以用于修饰类,成员变量,成员方法。
特点:
- 它修饰的类不能被继承。
- 它修饰的成员变量是一个常量。
- 它修饰的成员方法是不能被子类重写的。
final修饰的常量定义一般都有书写规范,被final修饰的常量名称,所有字母都大写。
final修饰成员变量,必须初始化,初始化有两种
- 显示初始化;
- 构造方法初始化。
但是不能两个一起初始化
final和private的区别:
- final修饰的类可以访问;
private不可以修饰外部类,但可以修饰内部类(其实把外部类私有化是没有意义的)。 - final修饰的方法不可以被子类重写;
private修饰的方法表面上看是可以被子类重写的,其实不可以,子类是看不到父类的私有方法的。 - final修饰的变量只能在显示初始化或者构造函数初始化的时候赋值一次,以后不允许更改;
private修饰的变量,也不允许直接被子类或一个包中的其它类访问或修改,但是他可以通过set和get方法对其改值和取值。
多态的成员特点:
- 成员变量:编译时期:看引用型变量所属的类中是否有所调用的变量;
运行时期:也是看引用型变量所属的类是否有调用的变量。
成员变量无论编译还是运行都看引用型变量所属的类,简单记成员变量,编译和运行都看等号左边。 - 成员方法:编译时期:要查看引用变量所属的类中是否有所调用的成员;
运行时期:要查看对象所属的类中是否有所调用的成员。如果父子出现同名的方法,会运行子类中的方法,因为方法有覆盖的特性。
成员方法编译看左边运行看右边。 - 静态方法:编译时期:看的引用型变量所属的类中是否有所调用的变量;
运行时期:也是看引用型变量所属的类是否有调用的变量。
静态方法编译和运行都看等号左边。
抽象关键字abstract不可以和哪些关键字共存?
- final:如果方法被抽象,就需要被覆盖,而final是不可以被覆盖,所以冲突。
- private:如果方法被私有了,子类无法直接访问,怎么覆盖呢?
- static:不需要对象,类名就可以调用抽象方法。而调用抽象方法没有意义。
接口中的成员修饰符是固定的!
- 成员常量:public static final,接口里定义的变量是全局常量,而且修饰符只能是这三个关键字,都可以省略,常量名要大写。
- 成员方法:public abstract,接口里定义的方法都是抽象的,两个修饰符关键字可省略。
继承与实现的区别:
- 类与类之间称为继承关系:因为该类无论是抽象的还是非抽象的,它的内部都可以定义非抽象方法,这个方法可以直接被子类使用,子类继承即可。只能单继承,可以多层继承。((class))
- 类与接口之间是实现关系:因为接口中的方法都是抽象的,必须由子类实现才可以实例化。可以单实现,也可以多实现;还可以在继承一个类的同时实现多个接口。((class) extends (class) implements (interface1,interface2…))
- 接口与接口之间是继承关系:一个接口可以继承另一个接口,并添加新的属性和抽象方法,并且接口可以多继承。((interface) extends (interface1,interface2…))
抽象类和接口的区别:
成员变量
- 抽象类能有变量也可以有常量
- 接口只能有常量
成员方法
- 抽象类可以有非抽象的方法,也可以有抽象的方法
- 接口只能有抽象的方法
构造方法
-抽象类有构造方法
-接口没有构造方法类与抽象类和接口的关系
- 类与抽象类的关系是继承 extends
- 类与接口的关系是实现 implements
接口的思想特点:
- 接口是对外暴露的规则;
- 接口是程序的功能扩展;
- 接口的出现降低耦合性;(实现了模块化开发,定义好规则,每个人实现自己的模块,大大提高了开发效率)
- 接口可以用来多实现;
- 多个无关的类可以实现同一个接口;
- 一个类可以实现多个相互直接没有关系的接口;
- 与继承关系类似,接口与实现类之间存在多态性。
内部类访问特点:
- 内部类可以直接访问外部类的成员,包括私有成员。
- 外部类要访问内部类的成员,必须要建立内部类的对象。
abstract不能与final并列修饰同一个类。
abstract 不能与private、static、final或native并列修饰同一个方法。、
阅读全文
1 0
- Java基础22:网络基础
- java基础问题22
- Java基础-22
- Java基础22
- java基础第22天
- Java基础01:基础
- Java基础:基础加强
- Java基础-基础
- java基础的基础
- JAVA基础---基础常识
- Java基础:基础加强
- [Java 基础]基础语法
- Java基础
- java基础
- java 基础
- java基础
- Java基础
- Java基础
- POJ
- 构造数据类型struct,共用体union,枚举类型enum,宏#define的区别
- idea安装配置SVN
- document.getElementsByClassName的封装,兼容ie8
- 【HPU 1414: Kick Ass】
- Java基础22
- 噩梦多校6。。HDU6103 Kirinriki(字符串,尺取法)
- 黑马搜索_下拉框提示
- MySQL入门3——约束及修改数据表
- XYNUOJ ACboy needs your help
- 哈理工OJ 1494 网络(割点)
- Path Sum II
- JVM(2)架构
- jbpm框架活动标志