Java学习记录

Java学习记录

面向对象注意事项:

  • static方法不能被重写;
  • 非static代码块可以初始化非static属性,也可以给static属性赋值,代码块初始化属性要早于构造器;
  • final属性必须显示赋值才能调用(可以采用显示赋值,代码块赋值,构造器赋值);
  • abstract代表需要被重写or继承;
  • 接口中所有成员变量都默认是public static final的(全局常量),所有方法都是默认public abstract的(抽象的);
  • 接口可以作为一个变量的类型,也具有多态性,JDK8.0以后接口中可以定义默认方法和静态方法;
  • 接口应用中需要注意接口冲突和类优先原则,若子类覆盖了接口中的方法,可以通过接口名.super.方法名来调用接口中的默认方法;
  • 内部类分为成员内部类和局部内部类,在内部类中调用外部类的同名属性使用外部类名.this.属性名
  • 局部内部类只能在声明他的方法体中使用,先声明后使用,除此之外,其他地方不能使用;
package com.zcf.test;

public class InnerClassTest {
   public static void main(String[] args) {
   	OuterClass outerClass = new OuterClass();
   	Interface innerClass = outerClass.getInnerClass();
   	innerClass.show();
   }
}

interface Interface {
   abstract void show();
}

class OuterClass {
   private int i = 1;

   public int getI() {
   	return i;
   }

   public void setI(int i) {
   	this.i = i;
   }

   public Interface getInnerClass() {
   	int n = 1;// 被内部类调用必须是final的,可以省略final
//		n = 2;
   	class InnerClass implements Interface {
   		private int i = 1;// i不是final的,可以被内部类调用

   		public void show1(int i) {
   			this.i = 2;
   			//Local variable n defined in an enclosing scope must be final or effectively final
//				n = 3;n必须被定义为final的
//				System.out.println(n);
   			System.out.println(this.i);
   			System.out.println(i);
   		}

   		@Override
   		public void show() {
   			System.out.println(n);// 若要调用外部类成员方法中的局部变量,则该局部变量必须是final的
   			System.out.println("实现Interface的抽象方法!");
   		}
   	}

   	new InnerClass().show1(n);//局部内部类只能在声明它的方法体内调用其自己独有的方法
   	return new InnerClass();//也可以返回其对象(声明为父类或父接口类型)
   }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值