Java SE面向对象部分-15.面向对象高级(03)
更新时间:2024-06-05 05:35:01 阅读量: 综合文库 文档下载
- java推荐度:
- 相关推荐
Java SE面向对象部分-15.面向对象高级(03)
上季内容回顾:
1、super与this关键字 2、方法的重载与覆写 本季主要知识点: 1、final关键字
2、简单了解一下抽象类与接口(是JAVA中最重要的部分) final关键字
终结器 —— final
1、被final标记的类不能被继承 final class A { };
class B extends A { };
验证一下:
2、被final标记的方法不能被子类覆写 final class A {
public final void print(){} };
class B extends A {
public void print(){} };
3、被final标记的变量就成为常量,如果成为常量,则以后不能修改 class A {
final String NAME = \; public final void print() {
NAME = \; } };
之前在声明变量的时候是第一个单词的首字母小写,之后每个单词的首字母大写。如果使用final声明常量,则所有单词的字母都要大写。 重点:全局常量:
· static:是所有对象共享的 · final:是一个常量
· public:表示可以让外部看见
public static final String FLAG = \全局常量 抽象类
抽象类:包含一个抽象方法的类就称为抽象类。 抽象方法:只声明而未实现的方法称为抽象方法。
方法没有方法体(方法体:“{}”),则称为是一个抽象方法。 除了抽象方法之外其他的定义如同普通类一样。 抽象类 = 普通类的功能 + 抽象方法
abstract class A {
public static final String FLAG = \; public void print() {
//有方法体,所以是一个普通方法
System.out.println(\World~~~\); }
//此处定义了一个抽象方法 public abstract void fun(); };
public class Demo04 {
public static void main(String args[]) {
A a = new A(); } };
如果要使用一个抽象类,不能直接实例化,抽象类是必须有子类的。
抽象类必须被继承,被继承的子类如果不是一个抽象类的话,则肯定要覆写全部的抽象方法。 abstract class A {
public static final String FLAG = \; public void print() {
//有方法体,所以是一个普通方法
System.out.println(\World~~~\); }
//此处定义了一个抽象方法 public abstract void fun(); };
//子类中覆写了抽象类中的全部抽象方法 class B extends A {
public void fun() {
//super.FLAG也可以写成FLAG,因为FLAG已经是全局常量了哈~~~ System.out.println(\+super.FLAG);
} };
public class Demo04 {
public static void main(String args[]) {
B b = new B(); b.fun(); b.print(); } };
验证效果,证明抽象类必须这样写哈~~~
抽象类的定义
抽象类的使用规则
抽象类的思考
abstract class Person {
//Person类应该有姓名和年龄 private String name; private int age;
public Person(String name,int age) {
this.name = name; this.age = age; }
public void setName(String name) {
this.name = name; }
public void setAge(int age) {
this.age = age; }
public String getName() {
return this.name; }
public int getAge() {
return this.age; }
//定义一个输出方法,但是此方法为抽象方法 public abstract String getInfo(); };
我们测试一下,发现编译正常,说明抽象类可以有构造方法哈~
我们继续哈~
abstract class Person {
//Person类应该有姓名和年龄 private String name; private int age; public Person(){}
//如果已经不是无参的,则必须在子类中明确调用无参构造 public Person(String name,int age) {
this.name = name; this.age = age; }
public void setName(String name) {
this.name = name; }
public void setAge(int age) {
this.age = age; }
public String getName() {
return this.name; }
public int getAge() {
return this.age; }
//定义一个输出方法,但是此方法为抽象方法 public abstract String getInfo(); };
class Student extends Person {
public Student(String name,int age) {
//调用Person类中有两个参数的构造方法 super(name,age); }
//覆写父类的抽象方法 public String getInfo() {
return \姓名:\+super.getName()+\,年龄:\+super.getAge(); } };
public class Demo05 {
public static void main(String args[]) {
Student s = new Student(\王乾\,27); System.out.println(s.getInfo()); } }
抽象类中允许有构造方法,但是此构造方法并不是直接实例化抽象类自己的对象使的,如果在抽象类中没有明确的无参构造方法,即:存在有参构造,则必须在子类明确的使用super指明要调用父类中的那个构造方法。 注意:
如果一个抽象类中没有任何一个抽象方法,则也是不能直接实例化的。 abstract class A {
public void print(){} };
public class Demo06 {
public static void main(String args[]) {
new A(); } };
final可以声明一个类,但是此类是绝对不能有子类的。 而抽象类又必须被子类继承。 ==>矛盾的 final abstract class A { };
验证下效果,我们发现抽象类是不能使用final声明的。
如果假设一个类就是抽象方法和常量的集合,那么此时往往都不再使用抽象类声明了,而使用接口声明。
接口(interface)
interface A {
//接口中包含了抽象方法和全局常量
public static String NAME=\; public abstract void print(); };
接口的使用规则(1)
一个子类继承接口实际上称为实现了接口。 interface A {
//接口中包含了抽象方法和全局常量
public static String NAME=\; public abstract void print(); };
class B implements A {
public void print() {
System.out.println(\+NAME);
如果实现接口的子类不是抽象类的话,则子类必须覆写接口中的全部抽象方法。
} };
public class Demo09 {
public static void main(String args[]) {
B b = new B(); b.print(); } };
接口使用的事项:
1、抽象类使的是extends关键字,表示一个类只能继承一个父类,但是接口不同,一个类可以同时实现多个接口,但是此时子类就必须同时覆写好多个接口中的抽象方法。 interface A {
//接口中包含了抽象方法和全局常量
public static String NAME=\; public abstract void print(); };
interface X {
public abstract void fun(); };
class B implements A,X {
public void print() {
System.out.println(\+NAME); }
public void fun() {
this.print(); } };
public class Demo10 {
public static void main(String args[]) {
B b = new B(); b.fun(); } };
抽象类拥有单继承的局限,而接口没有此限制,即:一个子类可以同时实现多个接口。 2、既然在定义中已经明确的说明了接口是抽象方法和全局常量的集合,则在定义接口的时候就可以简单定义。 interface A {
//接口中包含了抽象方法和全局常量
//public static String NAME=\ String NAME=\; //public abstract void print(); void print(); };
class B implements A {
public void print() {
System.out.println(\+NAME); } };
public class Demo11 {
public static void main(String args[]) {
B b = new B(); b.print(); } };
简化后实现的效果一样哈~
一般习惯在简化时还在前面加上public,呵呵~~~
interface A {
//接口中包含了抽象方法和全局常量
//public static String NAME=\ public String NAME=\; //public abstract void print(); public void print(); };
class B implements A {
public void print() {
System.out.println(\+NAME); } };
public class Demo12 {
public static void main(String args[]) {
B b = new B(); b.print(); } };
接口的使用规则(2)
interface A {
public void printA(); }
interface B {
public void printB(); }
interface C extends A,B {
public void printC(); }
class X implements C {
//如果实现了(继承)C接口,则在子类中就必须覆写全部的抽象方法 public void printA() {
System.out.println(\接口 ===> Hello World~~~\); }
public void printB() {
System.out.println(\接口 ===> Hello World~~~\); }
public void printC() {
System.out.println(\接口 ===> Hello World~~~\); } }
public class Demo13 {
public static void main(String args[]) {
X x = new X(); x.printA(); x.printB(); x.printC(); } }
如果一个子类即要实现一个接口又要继承一个抽象类呢? 则此时按以下格式编写:
class 类名称 extends 抽象类 implements 接口 interface X {
public void printX(); }
interface Y {
public void printY(); }
//一个抽象类也是可以实现接口的 abstract class Z implements Y {
public abstract void printZ(); }
//D类同时继承Z类和实现X接口 class D extends Z implements X {
public void printX() {
System.out.println(\===>Hello~~~\); }
public void printY() {
System.out.println(\===>Hello~~~\); }
public void printZ() {
System.out.println(\===>Hello~~~\); } }
public class Demo14 {
public static void main(String args[]) {
D d = new D(); d.printX(); d.printY(); d.printZ(); } }
总结
1、final关键字
2、抽象类与接口的定义及基本使用
ps:谨以此文庆祝本blog突破20W访问量,希望在2009年获得新的突破,得到技能的提升,下季我们将一起来学习多态哈~~~
#########################################################################
正在阅读:
Java SE面向对象部分-15.面向对象高级(03)06-05
驳岸工程施工组织设计06-11
巴可面板操作说明11-15
1我国古代十分重视座次,因为座次是分别尊卑的重要标志 - 图文11-07
高速数据采集中TMS320C6000DSP与PC机间串口通信的实现05-16
出库原油装车操作规程10-01
体育社会学笔记105-28
一年下册语文课后认读词语05-17
浅谈高中英语教学提高学生成绩的方法-2019年精选文档05-03
计算机模拟四06-17
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 面向
- 对象
- 高级
- 部分
- Java
- 15
- 03
- 浙江省2016年基金从业资格:固定收益投资试题
- 公务文书的处理与管理
- 金属工艺学习题及部分解答 - 图文
- “珍爱生命 学会自护”主题班会
- 文献检索作业
- 音乐鉴赏尔雅周海宏课后练习答案
- 食堂日常管理及考核细则
- 公司节假日应急预案
- 液晶屏常见故障和基本处理,屏ic,屏通病,液晶维修
- 名特水产在养殖中存在的问题及改进措施 2
- 浅谈词块教学法在小学英语词汇教学中的运用0522
- 最新-园林绿化工程项目管理措施 精品
- 目前医疗外包市场分析
- 百度之夜:如何解决网站移动化的痛点?
- 16春西南交《大学英语Ⅱ》在线作业一 答案
- 施工作业通航安全与防污染措施计划书
- 保利酒店测量方案 - 图文
- XXX井钻井工程设计 - 图文
- 英语教学思维导图
- 微机原理与接口技术(钱晓捷版)课后习题答案