Java学习笔记(八)abstract,final,变量及接口
来源:互联网 发布:wwe2k15优化补丁 编辑:程序博客网 时间:2024/05/29 08:22
1. abstract关键字
抽象类和抽象方法都以关键字abstract修饰.java中,抽象方法没有方法体,以一紧跟在声明之后的";"结束。
abstract class Figure {// 抽象类,一般作为其他类的超类protected double x;Figure() {}Figure(double x1) {this.x = x1;}abstract public double area(); // 抽象方法@Overridepublic String toString() {return "x=" + x;}}class Circle extends Figure {public Circle(double x1) {super(x1);}public double area() {// 具体方法return 3.1415926 * x * x;}public String toString() {// 方法覆盖return "圆:\t" + super.toString() + "\tarea:" + this.area();}}class Rectangle extends Figure {double y;public Rectangle() {}public Rectangle(double a, double b) {super(a);this.y = b;}public double area() {// 具体方法return x * y;}public String toString() {// 方法覆盖return "长方形:\t" + super.toString() + "\ty=" + this.y + "\tarea:"+ this.area();}}public class testFigure {public static void main(String[] args) {Rectangle r = new Rectangle(10.0, 20.0);Circle c = new Circle(10.0);Figure f = new Rectangle(30.0, 30.0);//自动类型转换System.out.println(r.toString());System.out.println(c.toString());System.out.println(f.toString());}}
运行结果:长方形:x=10.0y=20.0area:200.0圆:x=10.0area:314.15926长方形:x=30.0y=30.0area:900.0注意:
(1)如果一个类继承自某个抽象类,而没有实现抽向父类中的抽象方法,则该类必须定义为抽象类。
(2)抽象类不能被实例化。
(3)抽象类的作用是提供一个恰当的父类(一般作为其他类的超类,与final正好相反)
(4)如果一个类里有抽象方法,则这个类就必须声明成抽象的
(5)抽象类中可以没有抽象方法//如果一个类里有抽象的方法,则这个类就必须声明成抽象的abstract class Vehicle{//该类的没有给出方法体,声明为抽象方法,继承它的类中则需要定义该抽象方法体public abstract void calcFuelEffiency();//抽象方法public abstract void calcTripDistance();//抽象方法}abstract class Truck extends Vehicle{//一个类中包含有成员方法未实现的话,这个类必须声明为抽象类public Truck(double max_load){}public void calcFuelEffiency(){}/*public void calcTripDistance(){} */}class RiverVarge extends Vehicle{//类实现了定义的方法,则类不需要定义为抽象类public RiverVarge(double max_load){}public void calcFuelEffiency(){}public void calcTripDistance(){}}public abstract class testAbstract {//抽象类中可以没有抽象方法public static void main(String[] args) {}}<span style="color:#ff0000;"></span>2. final关键字(1)如果一个类没有必要再派生子类,通常可以用final关键字修饰,表明它是一个最终类。
(2)最终方法:用关键字final修饰的方法,既不能被覆盖,也不能被重载,它是一个最终的方法,其方法的定义永远不能改变。
注意:
(1)final类中的方法可以不声明为final方法,但实际上final类中的方法都是隐式的final方法。
(2)final修饰的方法不一定要存在于final类中。
(3)如果一个变量用final修饰,表明它在程序中是不能被修改的常量。
(4)final常量可以在声明的同时赋初值,也可以在构造函数中赋初值。
(5)为了节省内存,我们通常将常量声明为静态的(static)。
(6)定义类头时,abstract和final不能同时使用。public class testFinal {public static void main(String[] args) {// <span style="color:#ff0000;">final修饰复合类型数据时,修饰的是引用地址不能改变,</span>//但是指向的堆中的实例具体的值,则是可以改变的,即<span style="color:#ff0000;">引用的成员变量是可以改变的</span>final Student p1 = new Student("Tom", "M", 23);Student p2 = new Student("Mary", "F", 20);System.out.println("final p1:" + p1.toString());// p1=p2 //对final对象重新赋值会产生编译错误// 以下对final对象中的变量赋值是可以的p1.name = p2.name;p1.sex = p2.sex;p1.age = p1.age;System.out.println("final p1:" + p1.toString());}}class Student {String name;String sex;int age;public Student(String n, String s, int a) {this.name = n;this.sex = s;this.age = a;}@Overridepublic String toString() {return "Student [name=" + name + ", sex=" + sex + ", age=" + age + "]";}}
3. 变量(1)全局变量:全局变量的作用范围是整个类,即在该类的各个方法中可以直接使用。任何对全局变量值的改变,都可能对后续操作产生影响。
(2)局部变量:是指在一个方法或一个方法的程序块中声明的变量,也称为本地变量。局部变量的作用范围是声明该变量的方法或某一方法的程序块内不能在其他地方引用。
(3)全局变量(即成员变量)如果不初始化,则取默认值;局部变量(即本地变量)必须初始化,否则编译时将产生语法错误
(4)各种数据类型的默认值表
变量类型
byte
short
int
long
float
double
char
boolean
引用
默认值
0
0
0
0L
0.0f
0.0d
'\u0000'
false
null
4. 接口(1)接口是一组方法集,接口中包含的方法都是抽象方法,定义的方法体的任务留给实现该接口的类去完成,接口是用来实现类间(不相关类)多重继承功能的结构。
(2)接口是一种特殊的“类”,而且是一种特殊的“抽象类”,一个类是可以实现多个接口。
(3)接口中所有的方法都默认是public abstract的,并且只有方法头和参数列表,没有方法体。
(4)接口中所有的变量都默认是public static final的。
(5)接口没有构造方法,接口可以继承,而且可以多重继承
(6)接口中的方法体可以由Java语言书写,也可以由其他语言书写,用其他语言书写时,接口方法需要用native关键字修饰
接口的功能:
(1)通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系
(2)通过接口可以指明多个类需要实现的方法
(3)通过接口可以了解对象的交互界面,而不需要了解对象所对应的类
(4)通过接口可以在运行时动态地定位类所调用的方法
定义接口
[public ][interface] 接口名称[extends 父接口名列表]{
//静态常量
[public][static][final]数据类型 变量名 = 值;
//抽象方法
[public][abstract][native]返回值 方法名(参数列表);
}
实现接口
[修饰符] class 类名[extends 父类名][implements 接口A,接口B]{
类的成员变量和成员方法;
为接口A中的所有方法编写方法体,实现接口A;
为接口B中的所有方法编写方法体,实现接口B;
…
}
interface Iexample{void method1();void method2();}abstract class Example1 implements Iexample{//因为只实现了一个方法,所以类Example1需要定义为抽象类public void method1(){…}}interface A{char a = 'A';void showa();}interface B extends A{char b = 'B';void showb();}interface C{char c = 'C';void showc();}interface D extends B,C{//接口允许多继承char d = 'D';void showd();}class E implements D{char e = 'E';public void showa(){System.out.println("这里是接口" + a);}public void showb(){System.out.println("这里是接口"+b);}public void showc(){System.out.println("这里是接口"+c);}public void showd(){System.out.println("这里是接口"+d);}public void showe(){System.out.println("这里是类"+e);}}public class InterfaceTest1 {public static void main(String[] args) {E e = new E();e.showa();e.showb();e.showc();e.showd();e.showe();}}
运行结果:这里是接口A这里是接口B这里是接口C这里是接口D这里是类E注意:
(1)一个类在实现某个接口的抽象方法时,必须以完全相同的方法头,否则,只是在重载一个新方法,而不是实现已有的抽象方法。
(2)接口的抽象方法的访问限制符默认为public,所以在实现这些抽象方法时,必须显式的使用public修饰符,否则将被警告为缩小了接口中定义的方法的访问控制范围。
5. 包
(1)包是类和接口的集合,通过关键字package创建,用包来管理名称空间,包消除了不同组的类中潜在的类名冲突问题。
(2)Java中的每一个类都属于一个特定的包,包是有层次的
(3)包定义语句必须是Java源文件中的第一条可执行语句
(4)Java常用类库
API包 功能
java.lang 包含Java语言的核心类库
java.util 提供各种实用工具类
java.io 标准输入/输出类
java.net 实现Java网络功能的类库
java.awt 包含了Java图像界面中常用的类和接口
java.applet 提供对通用Applet支持的类和接口
java.security 支持Java程序安全性的类和接口
- Java学习笔记(八)abstract,final,变量及接口
- Java基础(八) Java修饰符及接口详解之(一)static/final/abstract关键字及接口的使用
- Java学习笔记之继承和接口(一) super关键字、final关键字、abstract类和方法
- Java接口中的成员变量默认为(public、static、final)、方法为(public、abstract)
- java学习笔记之static,final,abstract修饰符和接口
- java学习笔记<八>final修饰符
- JAVA学习笔记(十二)-final关键字与abstract关键字
- JAVA学习笔记-public、protected、private、abstract、static和final
- Java学习--static、final、abstract
- java学习笔记(三)java中的修饰符abstract、static与final
- Java学习笔记之Final(Static)变量
- Java笔记(八) 多态、抽象类、final关键字和接口
- corejava_static-final- abstract-接口
- static,final,abstract,接口
- Java基础学习笔记(八)List接口
- java学习笔记-抽象类abstract与接口interface
- java 面向对象学习笔记——修饰词final,static,abstract
- 学习笔记(3)~Java中的abstract
- 学习编程之前你应该了解的5件事
- jquery ajax实现上传文件代码,带进度条
- HDU 4908 BestCoder Sequence
- misc_register、 register_chrdev 的区别总结 .
- hdu 4883
- Java学习笔记(八)abstract,final,变量及接口
- HDOJ 题目2059 龟兔赛跑(动态规划)
- poj-3262-Protecting the Flowers
- POJ 1185 炮兵阵地
- OC类和对象
- html表格合并(行,列)
- 希尔排序-c++
- hibernate中criteria的用法
- Core Data入门