抽象类、接口、内部类
**
抽象类
**
抽象方法就是没有“{}”的方法,在抽象方法前面修饰用abstract
拥有抽象方法的类就是抽象类,抽象类要使用abstract关键字声明。
代码如下所示:
abstract class A{//定义一个抽象类public void fun(){//普通方法System.out.println("存在方法体的方法");}public abstract void print();//抽象方法,没有方法体,有abstract关键字做修饰}
抽象类的使用规则:
1.子类继承抽象类时必须重写抽象类中所有的抽象方法,并且一个子类只能继承一个抽象类
2.抽象类不能直接实例化,必须向上转型才可以。代码如下所示
abstract class A{//定义一个抽象类
public A(){System.out.println("A构造方法");
}public void fun(){//普通方法System.out.println("存在方法体的方法");}public abstract void print();//抽象方法,没有方法体,有abstract关键字做修饰}
//单继承
class B extends A{//B类是抽象类的子类,是一个普通类
public B(){System.out.println("B构造方法");
}@Overridepublic void print() {//强制要求覆写System.out.println("Hello World !");}}
public class TestDemo {public static void main(String[] args) {A a = new B();//向上转型a.fun();//被子类所覆写的过的方法}
}
输出结果:
A构造方法
B构造方法
3.同时如上代码,在子类对象实例化时仍和继承一样,先执行父类的构造方法,在执行子类的构造方法
接口
一、定义
接口(Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合。接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法,只有抽象方法和常量
interface A{//定义一个接口public static final String MSG = "hello";//全局常量public abstract void print();//抽象方法
}
注意;
1. 接口中的变量只能用“public static final”所以也是常量
2.接口中的方法 只能用“public abstract”修饰
二、使用
interface A{//定义一个接口Apublic static final String MSG = "hello";//全局常量public abstract void print();//抽象方法
}interface B{//定义一个接口Bpublic abstract void get();
}class X implements A,B{//X类实现了A和B两个接口@Overridepublic void print() {System.out.println("接口A的抽象方法print()");}@Overridepublic void get() {System.out.println("接口B的抽象方法get()");}}public class TestDemo {public static void main(String[] args){X x = new X();//实例化子类对象A a = x;//向上转型B b = x;//向上转型a.print();b.get();}}
总结如下:
(1)接口必须要有子类,但此时一个子类可以使用implements关键字实现多个接口;
(2)接口的子类(如果不是抽象类),那么必须要覆写接口中的全部抽象方法;
(3)接口的对象可以利用子类对象的向上转型进行实例化。
内部类
如下代码所示InnerClass就是内部类
public class OuterClass {private String outerName;private int outerAge;public class InnerClass{private String innerName;private int innerAge;优点:
1.内部类提供了更好的封装,只有外部类能访问内部类
2.内部类可以独立继承一个接口,不受外部类是否继承接口影响
3.内部类中的属性和方法即使是外部类也不能直接访问,相反内部类可以直接访问外部类的属性和方法,即使private lic class OuterClass {public void display(){//外部类访问内部类元素,需要通过内部类引用访问InnerClass innerClass=new InnerClass();innerClass.innerDisplay();}public class InnerClass{//内部类public void innerDisplay(){System.out.println("I am inner class");}}public static void main(String[] args) {OuterClass outerClass=new OuterClass();outerClass.display();}
}
同理创建内部类的对象只有两种方法:
第一种在外部类外:必须先创建外部类在创建内部类
OuterClass outerClass = new OuterClass();
OuterClass.InnerClass innerClass1 = outerClass.new InnerClass();
第二种:在外部类中
InnerClass innerClass=new InnerClass();
innerClass.innerDisplay();
抽象类、接口、内部类相关推荐
- 抽象类+接口+内部类作业题及答案
抽象类+接口+内部类作业题 一.选择题 Person类和Test类的代码如下所示,则代码中的错误语句是( ).(选择一项) public class Person { public String na ...
- 抽象类+接口+内部类作业题
抽象类+接口+内部类作业题 一. 选择题 1. Person类和Test类的代码如下所示,则代码中的错误语句是( c ).(选择一项) public class Person { public ...
- 面向对象(final/抽象类/接口/内部类)
>final 关键字 1.final修饰类,这个类不能被被继承; 2.final修饰变量,这个变量的值不能发生改变,就是常量; 注意: final修饰的变量,必须要初始化赋值,否则报错; 赋值的 ...
- Eclipse,静态,继承,封装,this,super,重写,重载,多态,final,冒泡排序,选择排序,抽象类,接口,内部类
文章目录 Eclipse工具中java项目的工程结构 静态代码块的书写格式 静态代码块,构造代码块,构造方法的优先级 static关键字的特点 封装的概念 private关键字的特点 面向对象思想特点 ...
- 抽象类+接口+内部类(有点晕 写的自己都感觉不太对)
1. 编写程序描述兔子和青蛙 需求说明:使用面向对象的思想,设计自定义类描述兔子和青蛙. 实现思路及关键代码 1) 分析兔子和青蛙的共性 2) 根据共性,定义抽象的动物类 属性:名字.颜色.类别(哺乳 ...
- 接口,抽象类与内部类
---恢复内容开始--- 抽象类 语法详解 当一个类中有一个抽象方法,那么他必须是一个抽象类 抽象类不能通过new来创建对象 抽象类可以包含抽象方法,但不是必须 若一个类继承自抽象类,那么他必须实现父 ...
- Java中接口、抽象类与内部类学习
2019独角兽企业重金招聘Python工程师标准>>> Java中接口.抽象类与内部类学习 接口与内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类和抽象方法 抽象方 ...
- JAVA抽象类接口初始化块实验_抽象类和接口 - 逝水无痕7777的个人空间 - OSCHINA - 中文开源技术交流社区...
抽象类和接口 1.抽象类 抽象方法是只有方法签名,没有方法实现的方法.有抽象方法的类只能被定义成抽象类,抽象类可以没有抽象方法.抽象方法和抽象类必须使用abstract修饰符来定义. 抽象类不能被实例 ...
- 小白学JAVA,与你们感同身受,JAVA---day6:抽象类接口的理解。鲁迅的一句话:总之岁月漫长,然而值得等待。
抽象类接口的理解 鲁迅的一句话:总之岁月漫长,然而值得等待. /* 抽象类中的面试题: 1.一个抽象类中可不可以没有抽象方法:可以,这样做的目的只有一个,就是不让其他类创建本类对象交给子类完成. 2. ...
- 继承 多态 抽象类 接口
面向对象编程 包 继承 组合 多态 抽象类 接口 包 包(package)是组织类的一种方式. 使用包的主要目的是保证类的唯一性. java中已经提供给我们很多现成的类供我们选择,例如可以使用 imp ...
最新文章
- java算法面试题_【干货】经典算法面试题代码实现-Java版
- 【Netty】Netty 入门案例分析 ( Netty 模型解析 | Netty 服务器端代码 | Netty 客户端代码 )
- leetcode 153. Find Minimum in Rotated Sorted Array | 153. 寻找旋转排序数组中的最小值(二分查找)
- java面向对相取钱存钱_java面向对象(银行存款业务无客户)
- PRML-系列一之1.6
- UDP报文观测以及DNS的工作原理
- 一张图学会python-一张图让你学会Python
- (十)洞悉linux下的Netfilteriptables:网络地址转换原理之SNAT
- 数字电路逻辑设计笔记(1):基础知识
- Mysql数据库实现分页查询
- python能开发微信公众号吗_用python如何开发微信公共帐号?
- 如何读取或转换PCD点云文件
- Google开源Live Transcribe的语音引擎
- 企业微信登录报错:应用程序无法正常启动(0xc0000142);Win10应用程序无法正常启动0xc0000142错误的解决方法
- 不撞南墙不回头-深度优先搜索算法
- HTML正方体滚动特效
- 苹果xr配置_5000元以内苹果手机推荐:11、XS、XSMax怎么选?
- JAVA微信公众号开发之自动回复消息与图片
- 【翻译】HyNet: Learning Local Descriptor with Hybrid Similarity Measure and Triplet Loss
- innodb的写缓存
热门文章
- openstack配置mysql_Centos7.4安装openstack(queens)详细安装部署(三)-镜像服务(glance)安装...
- java log4j 多线程_针对log4j 1.2.15中的并发锁问题,到底是io瓶颈,还是锁竞争导致线程block?...
- OpenCV : 仿射变换
- 容器技术Docker K8s 26 容器服务ACK基础与进阶-监控管理
- 2021-10-18word2vec训练过程
- 2021-09-03din 与dien
- GBDT, Gradient Boost Decision Tree,梯度提升决策树
- Container With Most Water(C++)
- k-d Tree及其Java实现
- 目标追踪论文之狼吞虎咽(1):VITAL算法