继承、重载、重写、多态、抽象类、接口、Static

继承:你继承什么你就有什么,继承是一种严格的父子关系。
如果⼀个类没有明确继承⽗类,那么就表示默认继承 Object (这个父类不一定是直接父类,孙子可以使用爷爷的方法)

OOP : Object  Oriented Programming 面向对象编程
Java是单继承,就是 一个类只能继承extends一个类, 但是java里面是 支持实现多个接口
Java只支持单继承,实现多重继承三种方式:(1)直接实现多个接口 (2)扩展(extends)一个类然后实现一个或多个接口  (3)通过内部类去继承其他类
----Java 不允许多重继承 ----- 但是允许使⽤多层继承 ----
继承
Class  A{}
Class  B{} 
Class  C extends A,B{}
这种多重的继承在 java ⾥⾯是不被允许使⽤的,只要使⽤就会报错。
继承
Class  A{}
Class  extends  A{}
Class  extends  B{}
这种多层继承相当于爷孙三代,爷爷 A —— 爸爸 B —— 孙⼦ C ;虽然这种多层继承在 Java ⾥⾯不限制继承
层数,但是为了代码逻辑清晰,在实际开发当中,最好不要超过三层
关于继承(super()):
public class Student extends Person {
private String className;
public Student() {
//new Person();不写的话 默认给加上super();
System.out.println("Student.Student");
}
//this.x:当前类的x对象
//super();代表调用父类的构造方法
public Student(int id, String name, int age, String gender, String className) {
//Java 里面 new 的时候,首先把父类对象 new出来,super(x); 前不能写任何代码
//new Person(id,name,age,gender);
//super(id, name, age, gender);//不写的话会默认加一个无参的super();
this.className = className;//不写super(id, name, age, gender);的话 只能得到className
System.out.println("Student.Student2");
}

附加:在⼦类对象构造之前⼀定会默认调⽤⽗类的⽆参构造,以保证⽗类的对象先实例化,再实例化
⼦类对象。
⼦类可以直接将⽗类的操作继续使⽤,属于代码重⽤;
⼦类可以继续扩充⾃⼰的标准

提高代码复用性。
将所有子类共有的属性和方法抽取到父类里面,子类继承父类,那么父类里面的属性和方法相当于子类里面也有。
-private:只在当前类里面可以访问(子类也不能访问)
+public:任何地方都可以访问
#protected: 对于父类里面想让子类继承的,一般设置为 protected

方法的重载: overload
在同一个类里面,允许存在一个以上同名方法,只要他们参数类型和参数个数不同即可。参数的类型、顺序和个数不同。
构造方法重载(无参构造方法、有参构造方法)
方法重载特点: 与返回值无关,只看参数列表。
void show(int a, char b, double c){}
1、void show(int x, char y, double z){}   不是重载,是同一个方法 
2、int show(int a, double c, char b){}      是重载, 顺序不一样也是重载
3、void  show(int a, double c, char b){}   是重载
4、boolean show(int c, char b){}           是重载
5、void show(double c){ }                     是重载
6、double show(int x, char y, double z){}  不是重载

重写(覆盖)@Override:toString()
概念:重写指的是在Java的子类与父类中有两个名称、参数列表都相同的方法的情况。由于他们具有相同的方法签名,所以子类中的新方法将覆盖父类中原有的方法。
1、子类覆盖父类,必须保证子类权限大于父类权限才可以覆盖,否则会编译失败。
2、如果父类是private的方法,子类是默认方法,那么子类是不知道这个方法的,不是覆盖。
  重写条件:(全面)
1、重写方法的参数列表必须完全与被重写方法的参数列表相同;
2、返回类型必须完全与被重写方法的返回类型相同;
3、访问级别的限制性一定不能比被重写方法的强;
4、访问级别的限制性可以比被重写方法的弱;
5、重写方法一定不能抛出新的检查异常或比被重写的方法声明的检查异常更广泛的检查异常;
6、重写的方法能够抛出更少或更有限的异常(也就是说,被重写的方法声明了异常,但重写的方法可以什么也不声明);
7、不能重写被标示为final的方法;
8、如果不能继承一个方法,则不能重写这个方法。
重载(Overload): 同一个类中看同名方法的参数列表。(构造方法重载)
重写(Override): 父子类方法要一模一样

多态
面向接口(抽象)编程 
关于Person person = new Student();的知识点
public class Add extends Cal {
//ctrl + o 重写父类里面的方法
public Add() {
super();
}
public Add(int num1, int num2) {
super(num1, num2);
}
// 不管 父类的getResult是不是抽象方法,子类都是重写
@Override
public int getResult() {
//super:代表父类对象
//Add add = new Add();
//add.getResult();
//对象.方法() 调用,调用getResult()方法时候,
//肯定已经new出来Add这个对象,new子类对象的时候一定已经把父类对象Cal已经new出来
//return super.getResult();
return num1 + num2;
}
}
public static void main(String[] args) {
//声明成子类类型,new子类对象,
// 如果子类重写了getResult方法
//那么调用的就是子类重写后的方法
//若果子类没有重写,调用的是从父类继承的方法
Add add = new Add(3, 5);
int result = add.getResult();
System.out.println(result);
//声明成父类类型,new子类对象
// 如果子类重写了getResult方法
//那么调用的就是子类重写后的方法
//若果子类没有重写,调用的是从父类继承的方法
Cal cal = new Add(3,5);//父类类型是可以指向子类类型的,通过指向不同的对象可以表现出不同的行为
int result1 = cal.getResult();
System . out .println( result1 );
//cal 声明成的是父类类型即可以指向new 出来的Add对象
//又可以指向new 出来的Sub对象
Cal cal1 = new Sub(3,5);
System.out.println(cal1.getResult());
}

抽象类:
1、抽象方法是没有方法体,如果这个类里面有抽象方法,这个类必须变成抽象类。
2、如果这个类是抽象类,并不要求这个类一定要有抽象方法
3、抽象类里面可以有普通方法,也可以有抽象方法。
4、如果一个类是抽象类,那么这个类就不能被new实例化,只能被其他类继承。
5、抽象方法可以理解为父类(抽象类)定义的一个模板或者规范(自己本身不实现),
子类必须实现这个抽象方法。如果子类不想实现这个方法,那么这个子类也必须要变成抽象类。
接口interface:
接口是一个纯粹的抽象类(接口可以没有方法,如果有里面所有的方法都是抽象方法 jdk1.8后接口中的方法可以有方法体,jdk1.8之前不可以有方法体
接口就是一个规范,他没有提供任何实现,具体的功能由实现接口的子类去实现。 若要实现一个接口为普通类则必须实现接口的所有抽象方法)
接口也可以继承接口(可以继承多个接口),但不能实现接。!!!!!!!!!
接口就是一个规范,可插拔(可以被替换,首先定义一个标准(接口),大家都遵守这个标准,就可以实现互相之间替换)
1、 接口是一个纯粹的抽象类 ,接口里面的方法都是抽象方法 public abstract(不写的话会自动提供)。
2、接口里面所有的属性public static final
接口和抽象类的区别
相同点: (1)都不能被实例化 (2)接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能实例化。
不同点: (1)接口只有定义,不能有方法的实现,java 1.8中可以定义default方法体,而抽象类可以有定义与实现,方法可在抽象类中实现。
(2)实现接口的关键字为implements,继承抽象类的关键字为extends。一个类可以实现多个接口,但一个类只能继承一个抽象类。所以,使用接口可以间接地实现多重继承。
(3)接口强调特定功能的实现,而抽象类强调所属关系。
(4)接口成员变量默认为public static final,必须赋初值,不能被修改;其所有的成员方法都是public、abstract的。抽象类中成员变量默认default,可在子类中被重新定义,也可被重新赋值;抽象方法被abstract修饰,不能被private、static、synchronized和native等修饰,必须以分号结尾,不带花括号。
抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已
在接口中 不可以有构造方法,在接口里写入构造方法时,编译器提示:Interfaces cannot have constructors。

final:最终的意思
final变量:这个变量就不能被修改,常量,一般用大写   public static final double PI  = 3.1415;
final类:这个类就不能被继承
final方法:这个方法就不能被重写

继承和接口中关于父类指向子类和子类指向子类的区别:
public void test1() {
   DaYan daYan = new DaYan();
    daYan.egg();
    daYan.fly();
    daYan.print();
   
    // bird是站在AbstractBird这个类角度去看new出来的DaYan这个对象,
    // 所以只能看到egg()这个方法
   AbstractBird bird = new DaYan();
    bird.egg();
    // bird.fly();
    // bird.print();
   
    // 站在能不能飞IFly的角度去看DaYan,只能看到fly()这个方法
   IFly fly = new DaYan();
    fly.fly();
    //fly.egg();
    //fly.print();
    fly = new GeZi();
    fly.fly();
}

继承和接口的区别:
继承是严格的父子关系,你继承什么你就是什么:鸽子就是鸟。
父类是抽取了所有子类的共同特征, 父类里面的属性和方法是所有子类所共有的属性和方法。
接口是一个标准,一般用在能不能具有某个功能。
把能不能飞定义称为一个接口IFly,实现了这个接口的类就具有了这个功能。

静态static: 静态属性、静态方法
1.在同一个类中:
1.在静态方法中可以直接使用静态成员
2.在非静态方法中可以直接使用非静态成员
3.在非静态方法中可以直接使用静态成员
4.在静态方法中是不可以直接使用非静态成员的
如果想用:
static  void test1(){
TestC tc = new TestC();// new 构造方法的调用
// 类的实例化:将某个类创建出一个对象
tc.test2();// 标准调用格式: 对象 . 非静态方法 / 变量
TestC.test3();// 静态成员调用格式: 类名.静态方法
}
2.在不同类中
TestC tc = new TestC();
tc.实例成员;
静态属性调用有两种方式:
1.对于静态属性可以使用:类名 . 属性 的方式调用 直接 TestC.静态成员
2.对象.属性   tc.静态成员(语法规则成立,但不推荐这样用)
附加: 关于static{}块的解释:
     只是在执行main之前执行的一些语句而已,并不是说里面的变量就是static的,没什么特别的。
     临时变量只在static这个大括号中有用。
使用时候: 
1、静态的方法只能访问静态的方法和静态的属性(因为当前对象的实例可以没有创建,
所以静态的方法是没办法调用非静态的方法和属性的)
2、静态的方法中不能写this、super关键字(因为当前的对象实例可能还没有创建,
代表当前类对象的this还有代表父类对象的super可能都还没有创建)
非静态的属性和方法(实例属性和方法)必须通过new对象访问,而静态的属性和方法
是属于类的,在类加载到内存中就可以访问,被所有对象所共享。

工具类:Math
把和数学运算相关的放在了一起
public class MathUtil {
private MathUtil () {
}
public static int max(int num1, int num2) {
return num1 > num2 ? num1 : num2;
}
public static int min(int num1, int num2) {
return num1 < num2 ? num1 : num2;
}
}
public static void main(String[] args) {
//生成返回值 crtl + alt + v
//int max = Math.max(3, 6); //Math的构造方法是私有的
//如果方法是实例的不是静态的 就需要new一个对象来调用
//MathUtil mathUtil = new MathUtil();
//int maxValue = mathUtil.max(3, 4);
//System.out.println(maxValue);
//把方法写成静态的static不用new一个对象,直接 类.方法()
//因为new一个对象的话浪费资源
//为了防止它new一个对象,一般让他的构造方法私有,这样就不能被实例化了(单例模式),直接就可以 “类.方法()”来调用;
MathUtil.max(3, 4);
Math .min( 3 , 4 );

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第四章 面向对象的概念和 Java 实现-2 回顾 类是具有相同属性和行为的一组对象的 集合 , 对象是类的实例 封装是隐藏对象实现细节的过程,以便不让用户看到实现的细节 类可用Class 来定义,类的变量和方法可被该类的实例访问, 圆点符号用于访问对象的成员,构造函数在创建对象时初始化对象 包可用package 来申明 ,可用import 来导入包 目标 理解继承及其特点 运用JAVA程序实现继承 理解多态及其特点设计 运用JAVA程序实现多态 掌握访问修饰符和方法修饰符 继承 继承的特点 继承的优点 继承JAVA实现 子类构造方法 2-1 子类构造方法 2-2 调用父类构造方法的语法为: super() 或 super(参数列表) ; super () 方法始终指向调用类的父类 调用父类构造方法 演示:示例 3 多态性 2-1 多态性是指¡°多种形式¡± 它使用不同的实例而执行不同操作 多态包括方法重写和方法重载 多态性 2-2 方法重载 2-1 方法重载 2-2 演示:示例 4 方法重写 2-1 方法重写 2-2 访问修饰符 3-1 信息隐藏是 OOP 最重要的功能之一,也是使用访问修饰符的原因 信息隐藏的原因包括: 对任何实现细节所作的更改不会影响使用该类的代码 防止用户意外删除数据 此类易于使用 访问修饰符 3-2 访问修饰符 3-3 访问修饰符可访问性 方法修饰符 static 修饰符 3-1 static修饰符修饰的方法叫静态方法 目的 使该方法独立于类的实例,使用类去访问,而不是类实例,所以也叫类方法 static 修饰符 3-2 调用静态方法的语法为: classname.methodname( ); static 修饰符 3-3 演示:示例 6 final 修饰符 abstract 修饰符 3-1 由abstract修饰的方法叫抽象方法;由abstract修饰的类叫抽象类 抽象方法必须声明在抽象类中 抽象方法语法: abstract type method_name(parameter_list); 声明抽象类语法: abstract class{…… } 使用:父类中的某些抽象不包含任何逻辑,并需要在子类中重写,子类提供这种抽象方 法的实现细节 abstract 修饰符 3-2 抽象类可以具有指向子类对象的对象引用 abstract 修饰符 3-3 演示:示例 7 接口 接口就是某个事物对外提供的一些功能的申明 可以利用接口实现多态,同时接口也弥补了Java单一继承的弱点 使用interface关键字定义接口 一般使用接口声明方法或常量,接口中的方法只能是声明,不能是具体的实现 创建接口的步骤 2-1 // 定义方法的接口 public interface myinterface { public void add(int x, int y); public void volume(int x,int y, int z); } // 定义程序使用的常量的接口 public interface myconstants { public static final double price = 1450.00; public static final int counter = 5; } 创建接口的步骤 2-2 接口使用示例 总结 封装、继承多态是面向对象的主要特征 继承可提高代码的重用性,使用extends关键字实现。除了构造方法之外,父类的所有 方法和属性都被子类的对象继承 多态性是不同的实例对象以不同的方式对相同的信息作出不同的表现 访问修饰符用于确定访问类成员的方式 Java 常用修饰符有 static、final、abstract 接口Java编程一项重要的技术,同过它可以实现多态,同时它也弥补了Java单一继承 的不足 . . ----------------------- 《java面向对象程序设计-继承多态》教案全文共5页,当前为第1页。 《java面向对象程序设计-继承多态》教案全文共5页,当前为第2页。 《java面向对象程序设计-继承多态》教案全文共5页,当前为第3页。 《java面向对象程序设计-继承多态》教案全文共5页,当前为第4页。 《java面向对象程序设计-继承多态》教案全文共5页,当前为第5页。
目 录 译者序 前言 第1章 对象的演化 1.1基本概念 1.1.1对象:特性十行为 1.1.2继承:类型关系 1.1.3多态性 1.1.4操作概念:OOP程序像什么 1.2为什么C++会成功 1.2.1较好的C 1.2.2采用渐进的学习方式 1.2.3运行效率 1.2.4系统更容易表达和理解 1.2.5“库”使你事半功倍 1.2.6错误处理 1.2.7大程序设计 1.3方法学介绍 1.3.1复杂性 1.3.2内部原则 1.3.3外部原则 1.3.4对象设计的五个阶段 1.3.5方法承诺什么 1.3.6方法应当提供什么 1.4起草:最小的方法 1.4.1前提 1.4.2高概念 1.4.3论述(treatment) 1.4.4结构化 1.4.5开发 1.4.6重写 1.4.7逻辑 1.5其他方法 1.5.1Booch 1.5.2责任驱动的设计(RDD) 1.5.3对象建模技术(OMT) 1.6为向OOP转变而采取的策略 1.6.1逐步进入OOP 1.6.2管理障碍 1.7小结 第2章 数据抽象 2.1声明与定义 2.2一个袖珍C库 2.3放在一起:项目创建工具 2.4什么是非正常 2.5基本对象 2.6什么是对象 2.7抽象数据类型 2.8对象细节 2.9头文件形式 2.10嵌套结构 2.11小结 2.12练习 第3章 隐藏实现 3.1设置限制 3.2C++的存取控制 3.3友元 3.3.1嵌套友元 3.3.2它是纯的吗 3.4对象布局 3.5类 3.5.1用存取控制来修改stash 3.5.2用存取控制来修改stack 3.6句柄类(handleclasses) 3.6.1可见的实现部分 3.6.2减少重复编译 3.7小结 3.8练习 第4章 初始化与清除 4.1用构造函数确保初始化 4.2用析构函数确保清除 4.3清除定义块 4.3.1for循环 4.3.2空间分配 4.4含有构造函数和析构函数的stash 4.5含有构造函数和析构函数的stack 4.6集合初始化 4.7缺省构造函数 4.8小结 4.9练习 第5章 函数重载与缺省参数 5.1范围分解 5.1.1用返回值重载 5.1.2安全类型连接 5.2重载的例子 5.3缺省参数 5.4小结 5.5练习 第6章 输入输出流介绍 6.1为什么要用输入输出流 6.2解决输入输出流问题 6.2.1预先了解操作符重载 6.2.2插入符与提取符 6.2.3通常用法 6.2.4面向行的输入 6.3文件输入输出流 6.4输入输出流缓冲 6.5在输入输出流中查找 6.6strstreams 6.6.1为用户分配的存储 6.6.2自动存储分配 6.7输出流格式化 6.7.1内部格式化数据 6.7.2例子 6.8格式化操纵算子 6.9建立操纵算子 6.10输入输出流实例 6.10.1代码生成 6.10.2一个简单的数据记录 6.11小结 6.12练习 第7章 常量 7.1值替代 7.1.1头文件里的const 7.1.2const的安全性 7.1.3集合 7.1.4与C语言的区别 7.2指针 7.2.1指向const的指针 7.2.2const指针 7.2.3赋值和类型检查 7.3函数参数和返回值 7.3.1传递const值 7.3.2返回const值 7.3.3传递和返回地址 7.4类 7.4.1类里的const和enum 7.4.2编译期间类里的常量 7.4.3const对象和成员函数 7.4.4只读存储能力 7.5可变的(volatile) 7.6小结 7.7练习 第8章 内联函数 8.1预处理器的缺陷 8.2内联函数 8.2.1类内部的内联函数 8.2.2存取函数 8.3内联函数和编译器 8.3.1局限性 8.3.2赋值顺序 8.3.3在构造函数和析构函数里隐藏行为 8.4减少混乱 8.5预处理器的特点 8.6改进的错误检查 8.7小结 8.8练习 第9章 命名控制 9.1来自C语言中的静态成员 9.1.1函数内部的静态变量 9.1.2控制连接 9.1.3其他的存储类型指定符 9.2名字空间 9.2.1产生一个名字空间 9.2.2使用名字空间 9.3C++中的静态成员 9.3.1定义静态数据成员的存储 9.3.2嵌套类和局部类 9.3.3静态成员函数 9.4静态初始化的依赖因素 9.5转换连接指定 9.6小结 9.7练习 第10章 引用和拷贝构造函数 10.1C++中的指针 10.2C+十中的引用 10.2.1函数中的引用 10.2.2参数传递准则 10.3拷贝构造函数 10.3.1传值方式传递和返回 10.3.2拷贝构造函数 10.3.3缺省拷贝构造函数 10.3.4拷贝构造函数方法的选择 10.4指向成员的指针(简称成员指针) 10.5小结 10.6练习 第11章 运算符重载 1
Java 基础核心总结》 Java 概述 什么是 Java2 Java 的特点Java 开发环境 JDK JRE Java 开发环境配置 Java 基本语法 数据类型基础语法运算符 Java 执行控制流程条件语句 if 条件语句 if...else 条件语句if...else if 多分支语句switch 多分支语句 循环语句 while 循环语句do...while 循环for 循环语句 跳转语句 break 语句 continue 语句面向对象 类也是-种对象对象的创建 属性和方法 构造方法 方法重载 方法的重写 初始化 类的初始化 成员初始化 构造器初始化初始化顺序 数组初始化 对象的销毁 对象作用域 this 和 super 访问控制权限继承 多态组合代理 向上转型static final 接口抽象类接口 抽象类异常 认 识 Exception 什么是 Throwable 常见的 Exception 与 Exception 有关的 Java 关键字 throws 和 throw try 、finally 、catch 什么是 Error 内部类 创建内部类集合 Iterable 接口顶层接口 ArrayList Vector LinkedList 类Stack HashSet TreeSet LinkedHashSet 类 PriorityQueue HashMap TreeMap 类 LinkedHashMap 类 Hashtable 类IdentityHashMap 类WeakHashMap 类 Collections 类集合实现类特征图 泛形 泛型的使用 用泛型表示类 用泛型表示接口泛型方法 泛型通配符 反射 Class 类Field 类Method 类ClassLoader 类 枚举 枚举特性 枚举和普通类-样枚举神秘之处 枚举类 I/O File 类 基础 IO 类和相关方法InputStream OutputStream Reader 类Writer 类 InputStream 及其子类 OutputStream 及其子类Reader 及其子类Writer 及其子类 注解 关于 null 的几种处理方式大小写敏感 null 是任何引用类型的初始值 null 只是-种特殊的值使用 Null-Safe 方法null 判断 关于思维导图 Java.IO Java.lang Java.math Java.net Java 基础核心总结 V2.0 IO 传统的 BIO BIO NIO 和 AIO 的区别什么是流 流的分类 节点流和处理流 Java IO 的核心类 File Java IO 流对象 字节流对象InputStream OutputStream 字符流对象Reader Writer 字节流与字符流的转换新潮的 NIO 缓冲区(Buffer)通道(Channel) 示例:文件拷贝案例 BIO 和 NIO 拷贝文件的区别操作系统的零拷贝 选择器(Selectors) 选择键(SelectionKey) 示例:简易的客户端服务器通信 集合 集合框架总览 -、Iterator Iterable ListIterator 二、Map 和 Collection 接口Map 集合体系详解 HashMap LinkedHashMap TreeMap WeakHashMap Hashtable Collection 集合体系详解 Set 接口 AbstractSet 抽象类SortedSet 接口HashSet LinkedHashSet TreeSet List 接口 AbstractList 和 AbstractSequentialList Vector Stack ArrayList LinkedList Queue接口Deque 接口 AbstractQueue 抽象类LinkedList ArrayDeque PriorityQueue 反射的思想及作用 反射的基本使用 获取类的 Class 对象构造类的实例化对象获取-个类的所有信息 获取类中的变量(Field) 获取类中的方法(Method) 获取类的构造器(Constructor) 获取注解 通过反射调用方法反射的应用场景 Spring 的 IOC 容器反射 + 抽象工厂模式 JDBC 加载数据库驱动类反射的优势及缺陷 增加程序的灵活性破坏类的封装性 性能损耗 代理模式 静态代理与动态代理常见的动态代理实现JDK Proxy CGLIB JDK Proxy 和 CGLIB 的对比动态代理的实际应用 Spring AOP 变量 变量汇总实例变量 实例变量的特点全局变量 静态变量 静态变量的特点类变量 局部变量
一卷 一、简答题 1. 什么是类?什么是对象? 2. 方法的重载和覆盖(重写)有什么区别? 3. 简述抽象类接口的异同。 4. 简述JDBC访问数据库的步骤。 二、编程题 1. 定义一个类Circle,计算并输出圆(半径=3)的面积 2. 在D盘创建文件test.txt,文件中的内容为Hello,world!,然后利用输入流输出流把文 件拷贝到E盘根目录下。 卷一答案 一、简答题1. 什么是类?什么是对象? 类是对某一类事物的描述,是抽象的、概念上的定义; 对象是实际存在的该类事物的每个个体,也称实例。 2. 方法的重载和覆盖(重写)有什么区别? 方法的重载重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后 者实现的是运行时的多态性。 重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不 同或者二者都不同)则视为重载重载对返回类型没有特殊的要求。 重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回 类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常。 3. 抽象类接口的异同 抽象类接口都不能够实例化,但可以定义抽象类接口类型的引用。 一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实 现,否则该类仍然需要被声明为抽象类接口抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法, 而接口中不能定义构造器而且其中的方法全部都是抽象方法。 抽象类中的成员可以是private、默认、protected、public的,而接口中的成员全都是 public的。 抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。有抽象方法的 类必须被声明为抽象类,而抽象类未必要有抽象方法。 4. 简述JDBC访问数据库的步骤 a) 加载JDBC驱动程序 b) 建立数据库连接 c) 创建Statement对象 d) 执行SQL语句 e) 处理返回结果 f) 关闭创建的对象 二、编程题 1. public class Circle { double radius; public Circle(double r){ radius=r; } public double area(){ return 3.14*r*r; }(8分) public static void main(String[] args) { Circle c=new Circle(3); System.out.println("圆的面积是"+c.area()); } }(7分) 2. public class FileCopy { public static void main(String[] args) { try { FileInputStream in=new FileInputStream("d:\\test.txt"); FileOutputStream out=new FileOutputStream("e:\\test.txt"); int c; while((c=in.read())!=-1){ out.write(c); } in.close(); out.close(); } catch (Exception e) { e.printStackTrace(); } } } 卷二 一、选择题 1.Java程序的跨平台特性是由( )支持的。 A.JVM B.编译器 C.IE浏览器 D.面向对象 2.下面定义一个整型数组,不合法的是( )。 A.int array[][]=new int[2][3]; B.int array[][]=new int[6][]; C.int [][]array=new int[3][3]; D.int [][]array=new int[][4]; 3.Java中,访问修饰符限制性最高的是( )。 A.private B.protected C.public D.friendly 4.关键字supper的作用是( )。 A.用来访问父类被隐藏的成员变量 B.用来调用父类中被重载的方法 C.用来调用父类的构造函数 D.以上都是 5.下面关于类及其修饰符的一些描述,不正确的是( )。 A.abstract只能用来派生类,不能创建abstract类的对象 B.final修饰的类不能用来派生子类 C.abstract可与final同时修饰一个类 D.abstract方法必须在abstract类中声明,但abstract类定义中可以没有abstract方法 6.下面( )关键字用来标明一个方法可能抛出各种异常。 A.try B.throws C.throw D.catch 7.下面用于创建动态数组的集合类是(

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值