zork
随机数
需要导入包:import acm.util.RandomGenerator;
先声明一个引用指向它的类方法:RandomGenerator randomGenerator = RandomGenerator.getInstance();
常用法:
randomGenerator.nextBoolean();
randomGenerator.nextInt(0, 2)
其实这是一个伪随机数,可以通过种子决定它的规律:
randomGenerator.setSeed(1276);
格式化输出
String name ="盖伦";
int kill = 8;
String title="超神";
//直接使用+进行字符串连接,编码感觉会比较繁琐,并且维护性差,易读性差
String sentence = name+ " 在进行了连续 " + kill + " 次击杀后,获得了 " + title +" 的称号";
System.out.println(sentence);
//使用格式化输出
//%s表示字符串,%d表示数字,%n表示换行
String sentenceFormat ="%s 在进行了连续 %d 次击杀后,获得了 %s 的称号%n";
System.out.printf(sentenceFormat,name,kill,title);
如果不使用格式化输出,就需要进行字符串连接,如果变量比较多,拼接就会显得繁琐
使用格式化输出,就可以简洁明了
%s 表示字符串
%d 表示数字
%n 表示换行
继承
关键字extends用来表示继承,一个类可以继承另一个类,被继承的叫父类,继承父类的类叫子类。
一个类可以被多个类继承,一个类只能继承一个类。
子类继承了父类就继承了父类的属性和方法,但父类带有private的属性和方法不能被继承。
对象
我总感觉对象和继承差不多,在new一个对象的时候需要用到构造方法。构造方法会初始化类里面的属性和方法,那么这个对象就拥有了这个类里面的属性和方法。
多态
父类型引用指向子类对象,这个子类对象的类型是父类,这个子类对象可以实现方法 的重写。
那么在设计一个函数时,参数类型是父类型,参数是子类对象,在方法体里可以让同类型不同对实现不同的方法重写。
类方法的隐藏
用关键字static修饰过的方法和属性叫类方法,静态方法和类属性,静态属性。相反的,没用static修饰的方法和属性叫对象方法,实例方法,非静态方法和对象属性,实例属性,非静态属性。
父类的对象方法可以被子类重写,父类的类方法也可以被子类重写,但在这里不叫重写,应当说是隐藏,父类的类方法可以被子类隐藏。
和对象方法不一样,子类对象的引用或者说类型无论是父类型还是子类型,在调用方法的时候都可以实现方法的重写,(补充:父类型的子类对象无法调用子类相对于父类新增的方法,怎么说来着,后人可知先人事,先人不知后人事。;父类型的父类对象只能调用父类的方法,和子类无关)。但类方法不一样,虽然子类可以隐藏父类的类方法,但不是重写,调用的时候和类型有关和对象无关,就是说父类型子类对象调用子类已隐藏父类的类方法时,用的还是父类里的那个类方法 。
或许是继承的作用
实例化一个子类对象,其构造方法会被调用,(注意)其父类的构造方法也会被调用。并且是父类构造方法先调用,子类的构造方法会默认调用父类的无参的构造方法。
这可能就是,子类继承了父类,父类的非private的属性和方法就被继承了。
supper关键字的三个作用
子类显示调用父类带参构造方法;调用父类属性;调用父类方法(在子类重写父类对象方法时,子类和父类的方法体大体相同 ,但要增加一些新的表达式时。)
equals和==区别
==是一个比较运算符,基本数据类型比较的是值,引用数据类型比较的是地址值。
equals()是一个方法,只能比较引用数据类型。重写前比较的是地址值,重写后一般是比较对象的属性。
和常量池有关,以后再看吧。