Java内部类
如下代码:
package com.studio.android;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
public class ChessView extends View {
//游戏状态常量:
private final static int GREEN = 0;
private final static int RED = 1;
//画笔对象 对整个棋盘绘图
private final Paint paint = new Paint();
private final Paint paintPoint = new Paint();
//点大小
private static int pointSize = 20;
// 所有未下的空白点
private final List<Point> allFreePoints = new ArrayList<Point>();
//屏幕右下角的坐标值,即最大坐标值
private static int maxX;
private static int maxY;
//第一点偏离左上角从像数,为了棋盘居中
private static int yOffset;
private static int xOffset;
//不同颜色的Bigmap数组
private Bitmap[] pointArray = new Bitmap[4];
public ChessView(Context context, AttributeSet attrs) {
super(context, attrs);
setFocusable(true);
//把三个颜色的点准备好,并放入数组
Resources r = this.getContext().getResources();
fillPointArrays(GREEN,r.getDrawable(R.drawable.green_point));
// fillPointArrays(NEW_GREEN,r.getDrawable(R.drawable.new_green_point));
fillPointArrays(RED,r.getDrawable(R.drawable.new_red_point));
// fillPointArrays(NEW_RED,r.getDrawable(R.drawable.new_red_point));
//设置画线时用的颜色
paint.setColor(Color.LTGRAY);
paintPoint.setColor(Color.BLACK);
}
//初始化好三种颜色的点
public void fillPointArrays(int color,Drawable drawable) {
Bitmap bitmap = Bitmap.createBitmap(pointSize, pointSize, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, pointSize, pointSize);
drawable.draw(canvas);
pointArray[color] = bitmap;
}
//初始横线和竖线的数目
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
maxX = (int) Math.floor(w / pointSize);
maxY = (int) Math.floor(h / pointSize);
//设置X、Y座标微调值,目的整个框居中
xOffset = ((w - (pointSize * maxX)) / 2);
yOffset = ((h - (pointSize * maxY)) / 2);
//创建棋盘上的线条
createLines();
// createPoints();
}
//产生棋盘上所有的线
private void createLines(){
for (int i = 0; i <= maxX; i++) {//竖线
lines.add(new Line(xOffset+i*pointSize-pointSize/2, yOffset, xOffset+i*pointSize-pointSize/2, yOffset+maxY*pointSize));
}
for (int i = 0; i <= maxY; i++) {//横线
lines.add(new Line(xOffset, yOffset+i*pointSize-pointSize/2, xOffset+maxX*pointSize, yOffset+i*pointSize-pointSize/2));
}
}
//画棋盘
private List<Line> lines = new ArrayList<Line>();
private void drawChssboardLines(Canvas canvas){
for (Line line : lines) {
canvas.drawLine(line.xStart, line.yStart, line.xStop, line.yStop, paint);
}
}
//画点
private void drawPoint(Canvas canvas){
for (int i = 0; i <= maxX; i++) {
for (int j = 0; j <= maxY; j++) {
// allFreePoints.add(new Point(i, j));
canvas.drawBitmap(pointArray[0],i*pointSize+xOffset,j*pointSize+yOffset,paint);
}
}
}
//线类
class Line{
float xStart,yStart,xStop,yStop;
public Line(float xStart, float yStart, float xStop, float yStop) {
this.xStart = xStart;
this.yStart = yStart;
this.xStop = xStop;
this.yStop = yStop;
}
}
//doRun方法操作的是看不见的内存数据,此方法内容数据以图画的方式表现出来,所以画之前数据一定要先准备好
@Override
protected void onDraw(Canvas canvas) {
drawChssboardLines(canvas);
drawPoint(canvas);
}
}
这里的class Line{}就是一个内部类,问题:内部类和普通类有什么区别和联系?
下面是引用的内容
引用
1)在一个类中定义另外一个类,这个类就叫做内部类(inner class) 。内部类的定义和普通类的定义没什么区别,它可以直接访问和引用它的外部类的所有变量和方法(包括private),就像外部类中的其他非static成员的功能一样。区别是,外部类只能声明为public和default,而内部类可以声明为private和protected。
2)当我们建立一个inner class时,其对象就拥有了与外部类对象之间的一种关系,这是通过一个特殊的this reference形成的,当内部类的成员方法中访问某个变量/方法时,如果在该方法和内部类中都没有定义过这个变量,调用就会被传递给内部类中保存的那个外部类对象的引用(OuterClass.this),通过那个外部类对象的引用去调用这个变量。
自己的见解:
- 内部类被认为类的方法,可以调用外部类的私用数据和方法,自己对外部类却可以隐藏。
内部类的数据只对外部类可见,也就是其他类不可以调用内部类以及内部类的数据(这些数据为公共的也无妨),内部类的数据及其方法可以被外部类的方法调用,但不可以被其它类调用。
外部类的方法不能有自己的数据和方法,这也是方法和内部类的区别。
分享到:
相关推荐
Java 内部类详解 Java 内部类是一种高级特性,允许在一个类的定义内部创建另一个类。这种设计模式提供了更灵活的代码组织方式,同时还可以实现特定的封装和访问控制。内部类主要分为四种类型:静态内部类、成员内部...
### Java内部类总结 在Java编程语言中,内部类是一个重要的概念,它允许开发者在一个类的内部定义另一个类。这种特性极大地增强了代码的封装性和复用性,同时也为解决特定问题提供了灵活的方法。本文将围绕Java内部...
### Java内部类详解 #### 一、内部类的分类与概念 Java的内部类机制是其强大特性之一,它允许类作为另一个类的成员存在,从而增强了代码的封装性和复用性。根据定义和作用域的不同,Java内部类主要分为四类: 1. ...
Java 内部类是Java语言特性中的一个重要组成部分,它允许我们在一个类的内部定义另一个类。内部类可以访问外部类的所有成员,包括私有成员,这使得内部类在实现复杂逻辑和封装上具有很大的灵活性。下面我们将详细...
### Java内部类的应用场景 #### 场景一:当某个类除了它的外部类,不再被其他的类使用时 内部类的使用场景之一是当某个类仅需被其外部类使用时。这种情况下,将此类定义为内部类可以提高代码的封装性和可维护性。 ...
Java内部类是Java语言提供的一种独特特性,它允许我们在一个类的定义内部定义另一个类。这种内部类可以是成员内部类、局部内部类、匿名内部类或静态内部类,每种都有其特定的用途和使用场景。在这个"java内部类使用...
12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类...
Java内部类是Java语言的一个特色特性,它允许我们在一个类的内部定义另一个类。这种设计模式在处理一些特定情况时非常有用,例如实现匿名回调、封装特定逻辑或创建与外部类有紧密关系的类。本篇文章将深入探讨Java...
Java内部类是Java语言的一个独特特性,它允许我们在一个类的内部定义另一个类。这种设计提供了更高级别的封装和组织代码的方式。以下是关于内部类及其相关知识点的详细说明: 1. **内部类基本语法** - **实例内部...
### JAVA内部类总结 在Java编程语言中,内部类(Inner Classes)是一种非常重要的特性,它允许我们在一个类的内部定义另一个类。这种结构不仅能够提高代码的组织性,还能帮助我们更好地处理类与类之间的关系。根据...
Java内部类是Java语言提供的一种独特机制,它允许在一个类的内部定义另一个类。这种设计模式使得代码结构更紧凑,可以更好地封装和隐藏实现细节,同时也增强了代码的复用性。内部类分为几种类型,包括成员内部类、...
Java 内部类总结 Java 内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用 protected 和 private 修饰(而外部类只能使用 public 和缺省的包...
Java内部类是Java语言特性中一个独特而强大的部分,它允许在一个类的内部定义另一个类。内部类可以访问外部类的所有成员,包括私有成员,这使得内部类在实现某些特定设计模式时非常有用。本篇文章将深入探讨Java中的...
Java内部类详解 Java内部类是Java语言中的一种特殊类别,它是指定义在另外一个类内部的类。内部类可以访问外部类的所有成员变量和方法,包括私有的变量和方法。内部类可以分为四种:成员内部类、静态嵌套类、方法...
谈Java内部类的四个应用场景
Java内部类是Java语言中一个独特且强大的特性,它允许我们在一个类的内部定义另一个类。内部类提供了增强封装的能力,使得内部类可以被隐藏在外部类中,仅对外部类可见,从而增加了代码的隐私性和安全性。同时,内部...
### Java内部类的作用 #### 一、定义及概念 内部类,顾名思义,指的是一个定义在另一个类内部的类。这样的结构让内部类能够访问外部类的成员(包括私有成员),并且允许内部类拥有不同的访问级别,如`private`、`...
Java内部类是Java语言的一个重要特性,它允许我们在一个类的内部定义另一个类。这种设计模式使得代码结构更加紧凑,同时也提供了更高级的封装和抽象。内部类主要有两种类型:成员内部类和局部内部类。 1. 成员内部...