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. 子数组最小值的总和 Sum of Subarray Minimums

    2018-09-27 23:33:49 问题描述: 问题求解: 方法一.DP(MLE) 动态规划的想法应该是比较容易想到的解法了,因为非常的直观,但是本题的数据规模还是比较大的,如果直接使用动态规划, ...

  2. Netty实现简易http_server

    Netty可以通过一些handler实现简单的http服务器.具体有三个类,分别是HttpServer.java.ServerHandlerInit.java.BusiHandler.java. 具体 ...

  3. PHP如何安装redis扩展(Windows下)

    PHP如何安装redis扩展(Windows下) 一.总结 一句话总结:下载扩展的dll,放入指定文件夹(php对应的扩展的目录php/ext),在配置文件php.ini中注册dll 尽量不要选择最新 ...

  4. stm32cube使用

    1.使用stm32cube生成CAN代码注意事项: a.需要手动配置CAN过滤器 { CAN_FilterConfTypeDef sFilterConfig; uint32_t filterID = ...

  5. eclipse报错:Could not resolve bean definition resource pattern [classpath:spring/applicationContext-*.xml]或者找不到

    1.把xml文件复制到WEB-INF下 2.路径改成 [/WEB-INF/spring/applicationContext-*.xml]

  6. Use GDB to debug a C++ program called from a shell script

    解决了我一个大问题!!! http://stackoverflow.com/questions/5048112/use-gdb-to-debug-a-c-program-called-from-a-s ...

  7. linux ----> centos 网络、tomcat、vi、等等的配置和使用

    网络/配置 环境: centos6.8-mini-version virtualbox 工具: FileZilla client  SecureCRT 静态ip地址 每一台计算机分配有一个固定的IP地 ...

  8. apiCloud 选择图片,选择视频,压缩图片

    选择视频或图片,只需要一个 UIMediaScanner 模板就可以实现,点击链接查看api https://docs.apicloud.com/Client-API/UI-Layout/UIMedi ...

  9. 代码版本控制[version control]之Git

    如何多人协同开发同一个项目? 使用代码版本控制[version control]软件, 目前市面上比较流行的代码版本控制器有: git,svn,csv 1. 使用git管理代码版本 本项目使用git管 ...

  10. memtrack: Couldn't load memtrack module (No such file or directory) 的问题解决

    通过了编译,可是在模拟器运行时,却出现stopping…….查看logcat,发现出现错误: E/memtrack: Couldn't load memtrack module (No such fi ...