当前位置: 首页 > news >正文

oop_day06_抽象类、接口_20150814

oop_day06_抽象类、接口_20150814


1.static final常量:

   1)必须声明同一时候初始化。不能改动,类名点来訪问

   2)常量名建议全部字母都大写

   3)编译器编译时会直接替换为详细的值---效率高

代码演示样例:

package oo.day06;
//static final常量
public class StaticFinalDemo {
	public static void main(String[] args) {
		//Aoo.NUM = 250; //编译错误。常量不能改动
		//System.out.println(Aoo.NUM);
		
		//1.方法区中载入Boo.class
		//2.将NUM1存储在方法区中
		//3.去方法区中获取NUM1的值并输出
		System.out.println(Boo.NUM1);
		
		//编译器在编译时直接被替换为详细的值。效率高
		//等价于System.out.println(6);
		System.out.println(Boo.NUM2);
	}
}
class Boo{
	public static int NUM1 = 5; //静态变量
	public static final int NUM2 = 6; //常量
}

class Aoo{
	public static final int NUM = 5; //常量
	//public static final double PI; //编译错误,必须声明同一时候初始化
}


2.抽象方法

   1)由abstract修饰

   2)仅仅有方法的定义。没有方法的实现(连大括号都没有)

3.抽象类:

   1)由abstract修饰

   2)包括抽象方法的类必须是抽象类

      不包括抽象方法的类也能够声明为抽象类-----我愿意

   3)抽象类不能被实例化

   4)抽象类是须要被继承的,子类:

      4.1)重写全部的抽象方法----建议

      4.2)声明为抽象类----不建议

   5)抽象类的意义:

      5.1)封装全部子类共同拥有的数据和行为。实现代码重用

      5.2)为全部子类提供了一种公共的类型(向上造型)

      5.3)包括抽象方法,为全部子类提供一个统一的入口

代码演示样例:

package oo.day06;
//求一组图形中的最大面积
public class ShapeTest {
	public static void main(String[] args) {
		//Shape s = new Shape(); //编译错误,抽象类不能被实例化
		Shape[] shapes = new Shape[4]; //创建Shape数组对象
		shapes[0] = new Circle(1); //向上造型
		shapes[1] = new Circle(2);
		shapes[2] = new Square(1);
		shapes[3] = new Square(2);
		maxArea(shapes);	
	}
	public static void maxArea(Shape[] shapes){ //求最大面积
		double max = shapes[0].area(); //最大面积
		int maxIndex = 0; //最大面积索引
		for(int i=1;i<shapes.length;i++){
			double area = shapes[i].area();
			if(area>max){
				max = area;
				maxIndex = i;
			}
		}
		System.out.println("最大面积为:"+max+",所在索引为:"+maxIndex);
	}
	
}

abstract class Shape{ //抽象类
	protected double c; //周长
	public abstract double area(); //抽象方法
}
class Circle extends Shape{
	public Circle(double c){
		this.c = c;
	}
	public double area(){ //重写抽象方法
		return 0.0796*c*c;
	}
}
class Square extends Shape{
	public Square(double c){
		this.c = c;
	}
	public double area(){ //重写抽象方法
		return 0.0625*c*c;
	}
}


4.接口:

   1)是一个标准、规范-----制定方

      遵守了这个标准,就能干某件事-----后期再理解

   2)由interface定义

   3)仅仅能包括常量和抽象方法

   4)接口不能被实例化

   5)接口是须要被实现(implements)的,实现类:

          必须重写接口中的全部抽象方法

   6)一个类能够实现多个接口。用逗号分隔

      若既继承又实现时。必须先继承,后实现

   7)接口之间能够继承

      7.1)类和接口之间为实现(implements)

      7.2)接口和接口之间为继承(extends)

      7.3)类和类之间为继承(extends)

代码演示样例:

package oo.day06;
//interface演示
public class InterfaceDemo {
	public static void main(String[] args) {
		//Inter6 o = new Inter6(); //编译错误,接口不能被实例化
		Foo o1 = new Foo();
		Inter6 o2 = new Foo(); //向上造型
		Inter5 o3 = new Foo(); //向上造型
		
	}
}

interface Inter5{
	void a();
}
interface Inter6 extends Inter5{
	void b();
}
class Foo implements Inter6{
	public void b(){}
	public void a(){}
}


interface Inter3{
	void a();
}
interface Inter4{
	void b();
}
abstract class Doo{
	abstract void c();
}
class Eoo extends Doo implements Inter3,Inter4{
	public void a(){}
	public void b(){}
	void c(){}
}

interface Inter2{
	void a();
}
class Coo implements Inter2{
	public void a(){}
}



interface Inter1{
	public static final int NUM=5;
	public abstract void show();
	
	double PI = 3.14159;//默认public static final
	void sayHi(); //默认public abstract
	
	//public void say(){} //编译错误
	//public int a; //编译错误
}








相关文章:

  • 电商直播ios app耗电发热比较评测
  • C# 中的委托和事件
  • 【extjs6学习笔记】1.6 初始:本地化
  • 我所知道的SharePoint feature(1)
  • 新增题目功能模块总结
  • 手机的各项性能测试
  • MyEclipse 历史版本
  • INSERT 失败,因为下列 SET 选项的设置不正确: 'ARITHABORT'
  • TCP/IP协议三次握手与四次握手流程解析
  • raid卡电池问题
  • JavaScript中的闭包
  • 微软将为 Linux 用户带来令人振奋的消息
  • 基于 React 和 Redux 的现代内容编辑器 ORY Editor
  • 使用IL实现对象的Clone,浅拷贝,和深拷贝的几篇文章
  • 基于 JavaScript 的操作系统你听说过吗?
  • 【译】JS基础算法脚本:字符串结尾
  • Java的Interrupt与线程中断
  • JS实现简单的MVC模式开发小游戏
  • React系列之 Redux 架构模式
  • Vue 动态创建 component
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 巧用 TypeScript (一)
  • 数据可视化之 Sankey 桑基图的实现
  • 微信小程序实战练习(仿五洲到家微信版)
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​Python 3 新特性:类型注解
  • #ifdef 的技巧用法
  • #Linux(make工具和makefile文件以及makefile语法)
  • (C语言)二分查找 超详细
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (五)Python 垃圾回收机制
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转) Android中ViewStub组件使用
  • .NET Micro Framework初体验
  • .Net MVC + EF搭建学生管理系统
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET开发人员必知的八个网站
  • .ui文件相关
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • /etc/fstab和/etc/mtab的区别
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • @RequestMapping用法详解
  • @我的前任是个极品 微博分析
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [BZOJ5125]小Q的书架(决策单调性+分治DP+树状数组)
  • [leetcode] 61. 旋转链表
  • [LeetCode] Sort List
  • [linux][调度] 内核抢占入门 —— 高优先级线程被唤醒时会立即抢占当前线程吗 ?
  • [mysql]错误解决之Failed to start MySQL Server
  • [NYOJ 536] 开心的mdd