7天学完Java基础之6/7
final关键字的概念与四种用法
final关键字代表最终,不可改变的
常见四种用法:
可以用来修饰一个类
当前这个类不能有任何子类
可以用来修饰一个方法
当final关键字用来修饰一个方法的时候,这个方法就是最终方法,也就是不能被覆盖重写
还可以用来修饰一个局部变量
被修饰后,变量不可改变
还可以用来修饰一个成员变量
Java中有四种权限修饰符
public > protected > (default) > private
| public | protected | default | private | |
|---|---|---|---|---|
| 在同一个类中 | YES | YES | YES | YES |
| 在同一个包中 | YES | YES | YES | NO |
| 在不同包中,但存在继承关系 | YES | YES | NO | NO |
| 在不同包中,不存在继承关系 | YES | NO | NO | NO |
内部类
分类:
- 成员内部类
- 局部内部类
成员内部类的定义格式:
修饰符 class 外部类名{
修饰符 class 内部类{}
}
如何使用成员内部类?有两种方式
间接方式:在外部类的方法中,使用内部类,然后main只是调用外部类的方法
直接方式:公式
外部类名称.内部类名称 对象名 = new 外部类().new 内部类();
第一种间接使用方式
//定义一个成员内部类
public class Body{
public class Heart{
public void beat(){
System.out.println("我是内部类的方法+"+"心脏跳动......"+name);
}
}
public void methodBody(){
System.out.println("我是外部类的方法");
new Heart().beat();
}
//我是成员变量,内部类也可以访问我
private String name;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
//使用内部类
public class BodyDemo{
public static void main(String[] args){
//间接使用
//创建对象调用方法,间接使用内部类
Body body = new Body();
body.methodBody();
//直接使用
Body.Heart heart = new Body().new Heart();
heart.beat();
}
}
内部类的同名变量的访问
public class Outer{
//创建一个内部类
int num = 10;
public class Inner{
int num = 20;
public void methodInner(){
int num = 30;
System.out.println(num);
System.out.println(this.num);
System.out.println(Outer.this.num);
}
}
public void newInner(){
Inner inner = new Inner();
inner.methodInner();
}
}
public class OuterDemo{
public static void main(String[] args){
Outer outer = new Outer();
outer.newInner();
}
}
局部内部类
定义格式:
修饰符 class 外部类名称{
修饰符 返回值类型 外部类方法名称(){
class 局部内部类名称{}
}
}
public class Outer{//外部类
public void methodOuter(){
//内部类
class Inner{
//内部类的成员变量
int num = 10;
//内部类的成员方法
public void methodInner(){
System.out.println(num);
}
}
//让局部变量在方法里直接使用
Inner inner = new Inner();
inner.methodInner();
}
}
public class OuterDemo{
public static void main(String[] args){
Outer outer = new Outer();
//局部内部类,存在于方法中,不能超出局部使用
//局部只属于当前所属的方法才可以使用他
outer.methodOuter();
}
}
匿名内部类
匿名内部类的定义格式:
接口名称 对象名 = new 接口名称(){覆盖重写所有的抽象方法};
public interface MyInterface {
public abstract void method1();
}
public class InterfaceDemo {
public static void main(String[] args) {
MyInterface myinterface = new MyInterface() {
public void method1() {
System.out.println("我是匿名内部类");
}
};
myinterface.method1();
}
}
类作为成员变量类型
//定义一个英雄类
public class Hero{
private int age;
private String name;
private Weapon code;
//手写的构造方法
public Hero(){}
public Hero(int age,String name,Weapon code){
this.age = age; this.name = name; this.code = code;
}
//设置get和set方法
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setWeapon(Weapon code){
this.code = code;
}
public Weapon GetWeapon(){
return code;
}
//英雄特与方法
public void attack(){
System.out.println(name+"手持"+code.getName()+"正在大杀四方,可怕的是他今年才"+age);
}
}
public class Weapon{
private String name;//已经是多兰剑了
public Weapon(){}
public Weapon(String name){
this.name = name;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
//创建英雄吧
public class HeroDemo{
public static void main(String[] args){
Weapon weapon = new Weapon("多兰剑");
Hero hero = new Hero();
hero.setWeapon(weapon);
hero.setName("光辉女郎");
hero.setAge(20);
hero.attack();
}
}
接口作为成员变量类型
public class Hero{
private String name;
private Skill skill;
public Hero(){}
public Hero(String name,Skill skill){
this.name = name;
this.skill = skill;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setSkill(Skill skill){
this.skill = skill;
}
public Skill getSkill(){
return skill;
}
public void attack(){
System.out.println("我叫"+name+"开始释放技能");
//传递那个接口,就用哪一个接口去调用use技能
skill.use();
System.out.println("释放技能完成");
}
}
public interface Skill{
public abstract void use();
}
public class HeroDemo{
public static void main(String[] args){
Hero hero = new Hero();
hero.setName("艾希");
Skill skill = new Skill(){
public void use(){System.out.println("pia==pia===pia");}
};
hero.setSkill(skill);
hero.attack();
}
}
7天学完Java基础之6/7的更多相关文章
- 7天学完Java基础之0/7
笔记-7天学完Java基础之0/7 1.常用命令提示符(cmd) 启动:Win+R,输入cmd
- 简明易懂,将细节隐藏,面向新手树立web开发概念——学完Java基础语法,超快速上手springboot+mybatiJavaWeb开发
简明易懂,将细节隐藏,面向新手树立web开发概念 --学完Java基础语法,超快速上手JavaWeb开发 Web本质(先忽视各种协议) Web应用可以理解为浏览器和服务器之间的交互. 我们可以看一个简 ...
- 7天学完Java基础之5/7
接口 接口就是一种公共的规范标准 是一种引用数据类型 定义格式 public interface 接口名称{} java7 中接口可以包含常量,抽象方法:Java8 还可以额外包含默认方法,静态方法: ...
- 7天学完Java基础之4/7
静态static 如果一个成员变量使用了static关键字,那么这个变量不再属于对象自己,而是属于所在的类,多个对象共享同一份数据 静态static 关键字修饰成员变量 public class St ...
- 7天学完Java基础之7/7
Object类的toString方法 类Object是类层次结构的根类 每个都使用Object作为超类 所有对象都实现这个类的方法 //这个是Object类的子类,实现了其所有方法 public cl ...
- 7天学完Java基础之3/7
API概述 什么叫做API? API(Application Programming lnterface),应用程序编程接口. 所谓API就是值好多的类,好多的方法,JDK给我们提供了很多现成的类,我 ...
- 7天学完Java基础之1/7
方法重载 package cn.itcat.day04.demo01; //方法重载就是参数个数不同,参数类型不同,参数类型的顺序不同 //方法重载与参数名称无关,与方法返回值类型无关 //方法重载方 ...
- 7天学完Java基础之2/7
面向对象 面向对象的思想就是值我们要实现一个共功能的时候,我们不自己去做,而是找别人帮我们去做,帮我们去做的这个人就是对象.面向对象强调的是谁来帮我实现这个功能. 类与对象的关系 类:是一组相关属性和 ...
- 学完 JAVA SE后学什么 。。。
我觉得学习j2ee一定要循序渐进,千万不要太急了.把java基础打牢一点,再牢一点.各位,你们在后面学习什么 struts,hibernate,spring,ajax..都很轻松. 第一个阶段(jav ...
随机推荐
- PHP生成excel(3)
这一节主要是设置背景颜色.边框.字体大小.表格宽度 效果图 代码如下 <?php header("Content-Type:text/html;charset=utf-8") ...
- 猫猫学IOS(二)UI之button操作 点击变换 移动 放大缩小 旋转
不多说,先上图片看效果,猫猫分享.必须精品 原创文章.欢迎转载.转载请注明:翟乃玉的博客 地址:viewmode=contents">http://blog.csdn.net/u013 ...
- 写2个线程,其中一个线程打印1~52,另一个线程打印A~z,打印顺序应该是12A34B45C……5152Z
我写的 class LN { private int flag = 0; public static char ch = 'A'; public static int n = 1; public sy ...
- VLFeat中SIFT特征点检测
本代码使用VLFeat库中的函数对一幅图像进行了SIFT检测 需要事先配置好VLFeat和OpenCV,VLFeat的配置参考前一篇博文,OpenCV的配置网上一大堆,自己去百度 #include & ...
- CPU维修技术
中央处理单元(Central Process Unit)简称CPU,是电脑的核心部件,负责处理和运算电脑内部所有数据.因其在电脑中的地位相当重要,所以一旦发生故障就会造成很严重的后果. [技术66]开 ...
- HDU 3065 病毒侵袭持续中(AC自己主动机)
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=3065 Problem Description 小t非常感谢大家帮忙攻克了他的上一个问题.然而病毒侵袭 ...
- OpenStack源码系列---nova-compute
nova-compute运行的节点为计算节点,虚拟机运行于计算节点上.例如对于创建虚拟机请求,nova-api接收到客户端请求后,经过nova-scheduler调度器调度,再将请求发送给某个选定的n ...
- 【iOS系列】-自定义Modar动画
[iOS系列]-自定义Modar动画.md 我们需要做的最终的modar动画的效果是这样的, 就是点击cell,cell发生位移,慢慢的到第二个界面上的.为了做出这样的动画效果,我们需要以下的知识. ...
- 关于android的DB操作
package com.metoo.girls; import android.content.ContentValues; import android.content.Context; impor ...
- css的书写规范,有哪些注意点
一.框架为先,细节次之. 先写一些浮动,然后高与宽,然后再是细节方面的书写. 比如写一个浮动容器的样式,我们应该先让这个容器的框架被渲染出来,让大家看到基本的 网站框架.然后再再去渲染容器里面的内容. ...