该博文是传智播客Java基础视频的学习笔记,仅为个人学习笔记,谢谢
有些类当中,方法都是静态的,不需要创建对象,所以将构造函数私有化。
javadoc的用法:class 前边必须加上public,加上public之后,文件名和类名必须一致,文档能提取出来的只有共有的方法,也只能提取/** */注释的内容。
public class ExtendsDemo {
public static void main(String[] args) {
Zi z = new Zi();
z.show();
}
}
class Fu{
int num = 5;
// 如果将该处的num设为private,
// 则下边的super.num会提示The field Fu.num is not visible
// 即,子类不能直接访问父类中的私有成员
}
class Zi extends Fu{
int num = 4;
void show(){
System.out.println(this.num+"..."+super.num);// 4...5
}
}
public class ExtendsDemo {
public static void main(String[] args) {
Zi z1 = new Zi();// 执行结果是 fu zi
Zi z2 = new Zi(3);// 执行结果是 fu zi3
}
}
class Fu{
Fu(){
// 如果将该构造函数改为下列构造函数,则需在zi()函数第一行显示调用super(int),
// 否则会报错,因为,定义了有参构造函数,默认构造函数就没有了
// zi()函数第一行中却有默认的super()
System.out.println("fu");
}
// Fu(int x){
// System.out.println("fu"+x);
// }
}
class Zi extends Fu{
Zi(){
System.out.println("zi");
}
Zi(int x){
//该处也是默认的调用super()
System.out.println("zi"+x);
}
}
public class InitializationDemo {
public static void main(String[] args) {
Zi z = new Zi(); // zi...show...0
z.show(); // zi...show...8
}
}
class Fu{
int num = 3;
Fu(){
show();
}
void show(){
System.out.println("fu...show...");
}
}
class Zi extends Fu{
int num = 8;
Zi(){
super(); // 隐式的super()语句
System.out.println("zi...ini..."+num);
//此处super()语句执行完,父类的初始化完成,开始子类的成员变量的显示初始化
//所以结果为zi...ini...8
}
void show(){
System.out.println("zi...show..."+num);
}
}
public class InnerClassDemo {
public static void main(String[] args) {
new Outer().method();
}
}
class Outer{
int num = 3;
class Inner{
int num = 4;
void show() {
int num = 5;
System.out.println(num); //5
System.out.println(this.num); // 4
System.out.println(Outer.this.num); // 3
}
}
void method() {
new Inner().show();
}
}
public class InnerClassDemo {
public static void main(String[] args) {
new Outer().method();
}
}
class Outer{
int num = 3;
void method() {
class Inner{
int num = 4;
void show() {
System.out.println(num); //4
}
}
new Inner().show();
}
}
class Outer{
int num = 3;
void method() {
final int x = 9;//从内部类中访问局部变量x,需要被声明为final类型
class Inner{
int num = 4;
void show() {
System.out.println(x);
}
}
new Inner().show();
}
}
因为Inner虽然是在局部位置上,但它是一个类,是可以创建对象的,method方法执行完之后,非final修饰的局部变量x就消失了,但是创建出来的Inner对象可能还在被某个变量所指向,这时候就会导致inner对象需要访问局部变量x时访问不到,所以就需要用final修饰x
public class InnerClassDemo {
public static void main(String[] args) {
new Outer().method();
}
}
abstract class Demo{
abstract void function();
}
class Outer{
/*class Inner extends Demo{
void function() {
System.out.println("function");
}
}*/
void method() {
// new Inner().function();
new Demo(){
void function() {
System.out.println("function");
}
}.function();
}
}
public class InnerClassDemo1 {
public static void main(String[] args) {
new Outer().method();
}
}
class Outer{
void method(){
new Object(){
void show(){
System.out.println("show");
}
}.show();
// 以下方式编译失败,因为匿名内部类这个子类对象被向上转型为了Object类型,
// 这样就不能再使用子类的特有方法了,参考多态
/*Object obj = new Object(){
void show(){
System.out.println("show");
}
};
obj.show();*/
}
}