1.接口:

类  和  对象     对象  is   a  类

    例子:

   小鸟    is  a  动物
飞机 is a 交通工具
子弹 is a 武器
卫星 is a 通讯工具 问题?
01. 小鸟 飞机 子弹 卫星 虽然不是一类! 但是却有一个公共点!!!都会飞!
02. 我们能不能把这个飞行的方法 写在 动物或者交通工具这些类中???
不能??为什么??
因为一旦我们把 飞行这个方法写在了 动物类中,代表所有的动物都会飞了!!!! 小鸟具有飞行的能力!
飞机具有飞行的能力!
子弹具有飞行的能力!
卫星具有飞行的能力!
这种关系 我们称之为 has a! 我们把 飞行这个能力! 写在一个叫 接口 的地方!
谁具有飞行的能力,就去 实现这个接口即可! 接口 : interface 特点:
01.接口不能被实例化,也不能有构造方法!
02.实现类必须重写接口中所有的方法!除非子类是抽象类或者接口!
03.接口中所有的变量 都是 静态常量!(必须赋予初始值) static final
04.接口中所有的方法都是 抽象方法! public abstract
05.解决了java中单根继承的问题,一个类只能extends一个类!但是可以implements N个接口
每个接口之间,使用逗号 隔开!
接口本身 只提供 某种功能,但是这个功能的具体实现,接口并不关注!
谁关注??谁实现了这个接口,谁关注! 接口A{
方法A();
}
接口B{
方法B();
}
接口C{
方法C();
} 接口D extends A,B,C{ } 实现类 implements 接口D{
方法A();
方法B();
方法C();
}
/*
* 动物类
*/
public abstract class Animal { public abstract void eat(); /**
* 因为 不是所有的动物都会飞行!
* 所以这个fly()压根 就不能定义在animal类中
*/
// public abstract void fly(); }

接口

/**
* 飞行的接口!
* 小鸟 飞机 以及 子弹 飞行的方式 一样吗?? 不一样!!
* 所以说 这个fly()有必要写方法体吗?? 没必要!!
* 说明这个fly()就是一个抽象方法!
*
*
*
*/
public interface FlyInterface { /**
* 静态常量
*/
static final int NUM = ; /**
* 飞行的能力
*/
public abstract void fly(); }

接口

public class Bird extends Animal implements FlyInterface {

    @Override
public void eat() {
System.out.println("小鸟在吃虫子!");
} @Override
public void fly() {
System.out.println("小鸟在飞翔.......");
}
}

接口

public class Cat extends Animal {

    @Override
public void eat() {
System.out.println("СèßäÔÙ³ÔÓã");
} }

接口

2.内部类:

内部类:把一个类写在了另一个类或者方法中!

分类:
01.成员内部类
可以访问我们外部类的所有属性和方法!
如果我们想访问内部类,必须要有外部类,只能通过外部类来访问内部类!
// 01.实例化外部类对象
Father father = new Father();
// 02.通过外部类对象创建内部类对象
Father.Son son = father.new Son();
// 03.调用内部类的方法
son.sayHello();
特点:
01.成员内部类可以拥有private,protected访问权限修饰符
02.如果外部类和内部类有相同的属性和方法的时候,就近原则,使用内部类的!
想使用外部类的属性和方法时:
外部类名.this.属性/方法!

02.局部内部类
类被定义在一个方法体或者作用域中!
特点:
仅限于方法体内使用 ,可以理解成局部变量! 03.匿名内部类 ******
001.没有名称!看不到类的定义!
002.所有的匿名内部类必须继承一个类或者实现一个接口 04.静态内部类
01.在内部类上加static
02.不依赖于外部类,可以直接new
03.不能访问外部类的非静态方法和属性
public class Father { // 外部类
/**
* 外部类的成员变量
*/
private static int age = ;
private String name = "小黑"; class Son { // 成员内部类
int age = ;
String name = "小白"; /**
* 内部类打招呼的方法
*/
public void sayHello() {
System.out.println("外部类的姓名:" + Father.this.name);
}
} /**
* 外部类的方法
*/
public void getSon() {
class Son { // 局部内部类 只能在getSon()中使用
public void sayBye() {
System.out.println("局部内部类 bye ");
}
}
Son son = new Son(); // 仅限于方法体内使用
son.sayBye();
} static class Son2 { // 静态内部类
public void sayBye() {
System.out.println("静态内部类====》 bye " + age);
}
} }

内部类

public interface Animal {

    void eat();

    void sleep();

}

内部类

import cn.bdqn.bean.Father.Son2;

public class InnerClassTest {

    public static void main(String[] args) {
// 使用内部类???
// 01.实例化外部类对象
Father father = new Father();
// 02.通过外部类对象创建内部类对象
Father.Son son = father.new Son();
// 03.调用内部类的方法
son.sayHello(); // 使用局部内部类
father.getSon(); // 使用静态内部类
Son2 son2 = new Son2();
son2.sayBye(); } // 当我们所在方法的形参需要在内部类中使用的时候,这个形参必须是final 修饰的! class Son { public void eatSomething(String something, final int age) {
// 使用匿名内部类
Animal dog = new Animal() {
@Override
public void sleep() {
System.out.println("小狗在睡觉");
} @Override
public void eat() {
System.out.println(age);
}
};
dog.eat();
dog.sleep(); } } }

内部类

OOP⑻的更多相关文章

  1. c#面向对象基础技能——学习笔记(二)基于OOP思想研究对象的【属性】

    字段(成员变量): 字段只能从对象中访问实例字段,无法直接从类中访问(换言之,不创建实例就不能访问),可以理解为:字段一般用在内部数据交互使用,当需要为外部提供数据时,(要优先使用自动实现的属性而不是 ...

  2. 一个简单oop的changeTab

    好多地方都会用到这样一个效果“点击tab切换内容页”,根据自己的想法实现了一下,写了个简单的插件.以前写代码都是标准的函数式编程,现在觉得面向对象编程看起来比较爽,并且更容易维护,于是就用oop的思想 ...

  3. Python OOP(面向对象编程)

    一OOP的作用 在Python中,类是面向对象设计(OOP)的主要工具.通过使用类这种工具,OOP可以: 1.分解代码,最小化代码的冗余. 2.通过定制现有的代码,来编写新的程序,而不用在原处进行修改 ...

  4. OOP,WEB开发实用小技巧

    偶然读到一篇博客,记录一下心得.这种设计对于新手来说一般是想不到的,它充分的发挥了OOP语言的特性,让代码专用而清爽.这是不是重构的思想呢? 我们在写业务层的时候,有很多方法是重复功能的,我们就可以使 ...

  5. 从OOP的角度看Golang

    资料来源 https://github.com/luciotato/golang-notes/blob/master/OOP.md?hmsr=toutiao.io&utm_medium=tou ...

  6. 玩转JavaScript OOP[2]——类的实现

    概述 当我们在谈论面向对象编程时,我们在谈论什么?我们首先谈论的是一些概念:对象.类.封装.继承.多态.对象和类是面向对象的基础,封装.继承和多态是面向对象编程的三大特性. JavaScript提供了 ...

  7. Atitit 面向对象编程(OOP)、面向组件编程(COP)、面向方面编程(AOP)和面向服务编程(SOP)的区别和联系

    Atitit 面向对象编程(OOP).面向组件编程(COP).面向方面编程(AOP)和面向服务编程(SOP)的区别和联系 1. 面向组件编程(COP) 所以,组件比起对象来的进步就在于通用的规范的引入 ...

  8. iOS - 对OOA、OOD、OOP的理解

    很多人在求职的时候,会遇到一个这样的问题:“对OOD/OOP有较深的理解”,这个时候有人就会问OOD.OOP是什么呢?那么今天咱们就一块来看一下OOA.OOD.OOP到底是什么! (一)OOA--面向 ...

  9. OOP感悟

    行内讲的最多的就是出来一年内基本靠copy,一年后才基本懂得如何去写代码,而理解领悟oop,需要的时间却不定. 我工作中,我发现很多人拿着面向对相当的语言作者做着面向过程的事情,不需要知其所以然,只要 ...

  10. 初识JAVA之OOP

    有一段时间没发博客了,每次手打还是很累,但感觉很充实.. 最近发现很多初学者到了面向对象编程这个知识点时,不太清楚类是如何转化成为对象的,很是困扰,今天我在这里谈谈我的理解,大家一起来研究学习... ...

随机推荐

  1. react点滴

    1.<SubSubComp {...this.props } /> 传递属性,{...props}的方式为组件传递了这两个属性,这就是JSX中的延展属性,"..."成为 ...

  2. python+selenium基础之XPATH定位(第一篇)

    世界上最远的距离大概就是明明看到一个页面元素矗在那里,但是我却定位不到!! selenium定位元素的方法有很多种,像是通过id.name.class_name.tag_name.link_text等 ...

  3. Python 编程快速上手 第六章总结

    第六章 字符串操作 前言 这一章节讲了关于 Python 中字符串类型的知识.与字符串有关的操作符,方法等等. 处理字符串:字符串的写入.打印.访问的知识 原始字符串 格式:r'string'作用:在 ...

  4. tchart2

  5. JS获取系统时间--JavaScript基础

    1.网页中实时显示当前时间 <!DOCTYPE html><html lang="en"><head> <meta charset=&qu ...

  6. MapReduce处理气象数据

    老师:MissDu 提交作业 1. 用Python编写WordCount程序并提交任务 程序 WordCount 输入 一个包含大量单词的文本文件 输出 文件中每个单词及其出现次数(频数),并按照单 ...

  7. You Don't Know JS: this & Object Prototypes( 第4章 Mixing "Class" Objects)

    本章移到“Object oriented programming”和"classes". 看‘class orientation‘ 的设计模式: instantiation, in ...

  8. p2751 Job Processing

    如果单单只安排过程1的时间最短,很容易算出来.用优先队列取最小,加上增量后再放回就行.对过程2也进行这样的操作.将过程1第一个完成的在过程2最后一个完成.以样例来说,过程1:1,1,2,2,3,过程2 ...

  9. 【洛谷p2430】严酷的训练

    (这个题有一个很神奇的地方) 严酷的训练[传送门] 算法标签(显然01背包了最近一直在练) (他居然没写……) 这个题啊,试了好几遍没a 最后发现在第二层循环的时候应该是j>=rqyt[p[i] ...

  10. js 遍历

    for循环 var a = new Array("first", "second", "third") for(var i = 0;i &l ...