第二章:Java面向对象:抽象(abstract)类、模板方法设计模式、接口(interface)、关键字-implements(实现)、代理模式
package com.atguigu.java;
/** Abstract关键字的使用:* 1.abstract:抽象的* 2.abstract可以用来修饰:类、方法* * 3.abstract 修饰类:抽象类* >此类不能实例化* >抽象类中一定有构造器,便于子类对象实例化的时候使用(子类对象实例化的全过程)* >在开发中,都会提供抽象类的子类,让子类对象实例化,完成相关的操作* * * 4.abstract 修饰方法:抽象方法* >抽象方法只有方法的声明没有方法体。* >包含抽象方法的类,一定是一个抽象类。反之,抽象类中是可以没有抽象方法的。* >若子类重写了父类中 所有 的抽象方法后,此子类方可实例化* 若子类没有重写父类中 所有 的抽象方法,则此子类也是一个抽象类,需要使用abstract修饰一下。* * */
public class AbstractTest {public static void main(String[] args) {//一旦person类抽象了,就不能再实例化了!
// Person p1 = new Person();
// p1.eat();}
}
abstract class Person{String name;int age;public Person(){}public Person(String name,int age){this.age = age;this.name = name;}//不是抽象方法
// public void eat(){
//
// }//抽象方法:public abstract void eat();public void walk(){System.out.println("人走路");}
}class Student extends Person{public Student(){}public Student(String name,int age){this.age = age;this.name = name;}public void eat(){System.out.println("学生多吃有营养的食物");}}
package com.atguigu.java;
/** abstract使用上的注意点:* 1.abstract不能用来修饰:属性、构造器等结构* 2.abstract不能用来修饰:私有方法(不能被重写)、* 静态方法(重写的都是非static的)、 以及final修饰的类和方法*/
public class AbstractTest1 {}
package com.atguigu.java;/** 抽象类的应用:模板方法的设计模式*/
public class TemplateTest {public static void main(String[] args) {SubTemplate t = new SubTemplate();t.spendTime();}
}abstract class Template {// 计算某段代码执行所需要花费的时间public void spendTime() {long start = System.currentTimeMillis();this.code();// 不确定的部分、易变的部分,就抽象一下,然后子类再去确定long end = System.currentTimeMillis();System.out.println("花费时间:" + (end - start));}// 抽象方法:必须存在在抽象类中,子类必须重写public abstract void code();
}class SubTemplate extends Template {@Overridepublic void code() {for (int i = 0; i <= 1000; i++) {boolean isFlage = true;for (int j = 2; j <= Math.sqrt(i); j++) {if (i % j == 0) {isFlage = false;break;}}if (isFlage) {System.out.println(i);}}}
}
package com.atguigu.java1;/** 接口的使用* 1.接口使用interface来定义* 2.Java和类是并列的结构* 3.如何定义接口:定义接口的成员* * 3.1 JDK7及以前:* 只能够去定义全局常量和抽象方法* >全局常量:public static final的,但是书写时是可以省略的,但是仍然存在。* >抽象方法:public abstract,但是书写时是可以省略的,但是仍然存在。* * 3.2 JDK8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法。* * 4.接口中是不能定义构造器的!意味着接口是不能实例化的。* * 5.Java开发中,既然不能实例化,接口通过让类去实现(implements)的方式来使用。* 如果实现类覆盖了接口中的所有抽象方法,那么这个实现类就可以实例化了* 但是如果实现类不能覆盖所有的抽象方法,则此实现类仍为抽象类,也就不能实例化。* * 6.Java类可以实现多个接口----->弥补了Java单继承性的局限性* 格式:class AA extends BB implements CC,DD,MM{* * }* * 7.接口和接口之间可以继承,而且可以多继承* * ********************************************************************** * 8.接口的具体使用,体现多态性!* * 9.接口实际上可以看作一种规范!* * */
public class InetrfaceTest {public static void main(String[] args) {System.out.println(Flyable.MAX_SPEED);// 直接通过接口调用,体现的是静态(static)System.out.println(Flyable.MIN_SPEED);// 直接通过接口调用,体现的是静态(static)// Flyable.MAX_SPEED = 8;会报错,体现的是finalPlane p = new Plane();p.fly();}
}interface Attackable {void attack();//省略了
}interface Flyable {// 全局常量:public static final int MAX_SPEED = 7900;// 第一宇宙速度int MIN_SPEED = 1;// 抽象方法:public abstract void fly();void stop();
}class Plane implements Flyable {@Overridepublic void fly() {System.out.println("通过引擎起飞");}@Overridepublic void stop() {System.out.println("驾驶员减速降落");}
}class Kite implements Flyable {@Overridepublic void fly() {}@Overridepublic void stop() {}
}
class Bullet extends Object implements Flyable,Attackable,CC{public void attack() {}public void fly() {}public void stop() { }@Overridepublic void method1() {// TODO Auto-generated method stub}@Overridepublic void method2() {// TODO Auto-generated method stub}
}
//**********************************
interface AA{void method1();
}
interface BB{void method2();
}
//多继承
interface CC extends AA,BB{}
package com.atguigu.java1;/** 接口的应用:代理模式 * */
public class NetWorkTest {public static void main(String[] args) {ProxyServer proxyServer = new ProxyServer(new Server());proxyServer.browse();}
}// 接口
interface NetWork {public void browse();}// 被代理,真实的服务器
class Server implements NetWork {@Overridepublic void browse() {System.out.println("连接服务器");}}class ProxyServer implements NetWork {private NetWork work;public ProxyServer(NetWork work) {// 构造器,给属性初始化this.work = work;}public void check() {System.out.println("检查网络问题");}@Override // 真正地去联网的是服务器public void browse() {check();work.browse();}}
第二章:Java面向对象:抽象(abstract)类、模板方法设计模式、接口(interface)、关键字-implements(实现)、代理模式相关推荐
- 零基础入门 自学 JAVA SE 基础篇(九)instanceof final 开闭原则 多态 抽象(abstract)方法与抽象类 接口(interface)
JAVA SE自学 基础篇 多态 instanceof final 开闭原则 多态 抽象(abstract)方法与抽象类 接口(interface) 目标 父类型与子类型之间的转换及instanceo ...
- 使用java实现面向对象编程第二章_java面向对象编程——第二章 java基础语法
第二章 java基础语法 1.java关键字 abstract boolean break byte case catch char class const continue default do d ...
- java语言定义一个具备栈功能的类_Java学习笔记 第二章 Java语言基础
第二章 JAVA语言基础 一.关键字 1.关键字的定义和特点 定义:被Java语言赋予了特殊含义的单词 特点:关键字中所有的字母都为小写 2.用于定义数据类型的关键字 c;ass interface ...
- 第4章 - Java面向对象
第4章- Java面向对象 10 包 (basic.facobj.pack.PackageDemo) 1).对类文件进行分类管理 2).给类提供多层命名(名称)空间 3).写在程序文件的 ...
- java 3D 第二章 java 3D基本概念
java 3D 第二章 java 3D基本概念 java 3D基本概念 java 3D的包及其功能 java 3D 高分辨率大尺度坐标 Java 3D场景图(Scene Graph) VirtualU ...
- 描述java源程序构成_Java第二章Java程序设计
<Java第二章Java程序设计>由会员分享,可在线阅读,更多相关<Java第二章Java程序设计(140页珍藏版)>请在人人文库网上搜索. 1.第2章 Java基本语法,2. ...
- (Java零基础学习笔记)第二章 Java中的基本语法
前言: 大家好! 我是BA unravel .如果你想和我一起学习JAVA,欢迎大家一起来学习这个世界上最好的语言! 学习目标: 一周掌握 Java 入门知识 学习内容: 1. 搭建 Java 开发环 ...
- 八、Java面向对象编程(类、对象、方法、重载、可变参数、作用域、构造器、this本质)
文章目录 Java面向对象编程(类.对象.方法.重载.可变参数.作用域.构造器.this本质) 一.类与对象 1. 类与对象的引出 2. 使用现有技术解决 3. 现有技术解决的缺点分析 4. 类与对象 ...
- 【JAVA SE】第二章 Java语法基础、数据类型、基本类型的字面值、基本类型的类型转换和运算规则
第二章 Java语法基础.数据类型.基本类型的字面值.基本类型的类型转换.运算规则和标识符命名风格 文章目录 第二章 Java语法基础.数据类型.基本类型的字面值.基本类型的类型转换.运算规则和标识符 ...
- 第二章 java常用开发工具以及程序的编写
2019独角兽企业重金招聘Python工程师标准>>> 第二章 java常用开发工具以及程序的编写 1. 程序的概念 2. java程序的开发的三个步骤 ...
最新文章
- 第二十章:异步和文件I/O.(十一)
- 学术与技术(与队长交流偶得)
- 【NOSQL ]】 redis 安装
- 生成随机长度字符串,比如密码等
- [html] 你知道短链接的生成原理吗?
- java学习(96):线程的睡眠
- php要懂函数吗,九个你需要知道的PHP函数和功能
- 为什么有些小区业主不愿意交物业费?
- 前端性能优化—js代码打包 1
- Android开发之EditText属性详解
- 全栈工程师是什么,为什么需要全栈工程师?
- 反悔贪心 + 优先队列:PIPI的逃跑路线Ⅳ
- win10便签常驻桌面_便签,草图,截屏草图,一个win10自带的小工具统统解决!...
- ubuntu系统强制解锁
- 中国蒸汽眼罩市场销售趋势及营销渠道策略报告(新版)2022-2027年
- 基于FPGA的视频图像拼接融合(附源码)。
- pycharm选择虚拟环境
- 用js给html添加样式
- 网易企业邮箱:给国外公司发邮件用什么邮箱?
- 展望未来 :今后十年可能诞生的21个新工作