@nextleaf
2018-08-09T11:21:33.000000Z
字数 5220
阅读 772
Java 数组 访问权限修饰符 内部类 继承
//静态初始化//指定了值,就不能在【】中指定大小int[][] dyadicArray2=new int[][]{{1,2,3},{3,2,1},{1}};//动态初始化int[][] dyadicArray=new int[3][4];dyadicArray[0]=generateRandomNum(0, 10, 4);dyadicArray[1]=generateRandomNum(0, 10, 4);dyadicArray[2]=generateRandomNum(0, 10, 4);String[][] dyadicStringArray=new String[3][4];dyadicStringArray[0]=generateRandomNumber(0,10,4);dyadicStringArray[1]=generateRandomNumber(0,10,4);dyadicStringArray[2]=generateRandomNumber(0,10,4);//Console.log(dyadicArray);//Console.log(dyadicStringArray);int[][] dyadicArray3=new int[3][];
//遍历二维数组System.out.println("遍历二维数组");ergodic(dyadicArray);ergodic(dyadicArray2);ergodic(dyadicStringArray);。。。。public static void ergodic(int[][] darray){for (int[] i:darray){for (int j:i){System.out.print(j);}System.out.print(",");}System.out.println();}public static void ergodic(String[][] darray){for (String[] i:darray){for (String j:i){System.out.print(j);}System.out.print(",");}System.out.println();}
/** @Author 黄昭鸿* @Description 使用System.arraycopy复制数组* @Date 18-8-9 上午9:54* @Param []* @Return void**/public static void copyDyadicArray(){int[] a={88,99,77,1,2,3,4,5,6,7,8,9,0,6,9};int[] b={1,1,1,1,1,1,1,1,1,1};//对于一维基本数据类型数组来说,System.arraycopy这种复制属性值传递,修改副本不会影响原来的值//源数组,源数组起始位置,目标数组,目的数组放置的起始位置,复制的长度System.arraycopy(a,1,b,1,a.length-6);//对于二维或者一维数组中存放的是对象时,System.arraycopy复制结果是一维的引用变量传递给副本的一维数组,修改副本时,会影响原来的数组for (int i:b){System.out.print(i+".");}}
//二维数组常用方法
kkkk
/** @Description 内部类InternalClassDemo* @Date 18-8-9 上午10:24**/public class InternalClassDemo{public static void main(String[] args) {new OutterClass();//必须通过外部类对象创建成员内部类的对象OutterClass.MemberInternalClass memberInternalClass=new OutterClass().new MemberInternalClass();//方式二OutterClass.MemberInternalClass memberInternalClass1=new OutterClass().getMICInstance();memberInternalClass.showInfo();memberInternalClass1.showInfo();//静态内部类不能使用外部类的非static成员变量或者方法new OutterClass.StaticInternalClass();}}class OutterClass {//构造方法public OutterClass() {//在外部类中,如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问new MemberInternalClass().showInfo();}//成员方法public void showInfo(){System.out.println("外部类");//局部内部类class LocalInternalClass{public LocalInternalClass() {}}}public static void staticMethod(){System.out.println("外部类的静态方法");}public MemberInternalClass getMICInstance(){return new MemberInternalClass();}//成员内部类class MemberInternalClass{public MemberInternalClass() {}//同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员public void showInfo(){System.out.println("成员内部类");OutterClass.this.showInfo();}}//静态内部类static class StaticInternalClass{public StaticInternalClass() {//静态内部类不能使用外部类的非static成员变量或者方法staticMethod();}}//AnonymousInnerClass匿名内部类}
private、default(缺省不写)、protected、public
private和protected不能修饰接口
| 修饰符 | 同一类内 | 同一包内 | 子类 | 其他包 |
|---|---|---|---|---|
| private | yes | |||
| 缺省 | yes | yes | ||
| protected | yes | yes | yes | |
| public | yes | yes | yes | yes |
注意:
在同包内,类中 protected 或 default 修饰的属性或方法可以被其对象外部访问,可以被子类继承。protected 或 default 的访问级别与 public 相同。
在异包内,,类中 protected 修饰的属性或方法不可以被其对象外部访问,可以被子类继承(同其他语言相同)。类中 default 修饰的属性或方法不可以被其对象外部访问,不可以被子类继承,此时 default 如同 private。
父类中声明为 public 的方法在子类中也必须为 public。
父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。
父类中声明为 private 的方法,不能够被继承。
public 或default(缺省不写),内部类可以private、protected
一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。
- 良好的封装能够减少耦合。
- 类内部的结构可以自由修改。
- 可以对成员变量进行更精确的控制。
- 隐藏信息,实现细节。
Kingdom.java
package com.nl.sx809.JavaAccessModifiers;/*域(Domain)、界(Kingdom)、门(Phylum)、纲(Class)、目(Order)、科(Family)、属(Genus)、种(Species)*/interface Domain {public String vitalsigns();public void showInfo();}class Phylum extends Kingdom {protected String name="门";}class ClassT extends Phylum {public void changeName(){//此处将覆盖父类的name属性this.name="而非国际化女同胞拍马屁年龄在客户处副本";}}class Order extends ClassT {}class Family extends Order {}class Genus extends Family {}class Species extends Genus {}public class Kingdom implements Domain {/** 方法的继承规则:* 父类中声明为 public 的方法在子类中也必须为 public。* 父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。* 父类中声明为 private 的方法,不能够被继承。* */protected String name="界";protected String signs="activity";public Kingdom() {}@Overridepublic String vitalsigns() {return signs;}@Overridepublic void showInfo() {System.out.println("I am "+vitalsigns()+",my name is "+name);}//getter、setterpublic void setSigns(String signs) {this.signs = signs;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
AccessModifiersDemo.java
package com.nl.sx809.JavaAccessModifiers;/** Description:四种访问权限修饰符* `private`、default(缺省不写)、`protected`、`public`* private和protected不能修饰接口* 详见笔记https://www.zybuluo.com/nextleaf/note/1243720* @author 黄昭鸿* @date 2018/8/9 17:50* @param* @return*/public class AccessModifiersDemo {public static void main(String[] args){Domain kingdom=new Kingdom();Kingdom phylum1=new Phylum();Kingdom phylum2=new Phylum2();Phylum classT1=new ClassT();ClassT order1=new Order();Order family1=new Family();Family genus1=new Genus();Genus species1=new Species();kingdom.showInfo();//属性没有多态性,其值取决于引用值//此处仍打印"界"System.out.println(phylum1.name);//通过构造方法覆盖属性值phylum2.showInfo();//方法具有多态性,可以借助继承的方法覆盖属性值classT1.setName("ClassTdemo");classT1.showInfo();order1.setName("OrderDemo");order1.showInfo();family1.setName("FamilyDemo");family1.showInfo();genus1.setName("GenusDemo");genus1.showInfo();species1.setName("SpeciesDemo");species1.showInfo();}}
