Java培训笔记 3-java类型系统

多态的继承相关

无论父类中的成员变量是静态的、还是非静态的,都会被子类继承。但是父类中的私有成员变量,无法在子类中直接访问,可以通过从父类中继承得到的protected、public方法(如getter、setter方法)来访问。

接口

接口是一种特殊的抽象类,是常量值和方法定义的集合。java类是单继承的,但接口可以多继承。不允许类多重继承的主要原因是,当A同时继承B和C中,B和C同时有一个D方法,A不能确定继承哪一个。
但接口不存在这样的问题,接口全都是抽象方法继承谁都无所谓,所以接口可以继承多个接口。

注意:

1)一个类如果实现了一个接口,则必须实现该接口的所有强制方法。否则此类必须声明为抽象类。

2)方法的名字、返回类型、参数必须与接口中完全一致。如果方法的返回类型不是void,则方法体必须至少有一条return语句。

3)因为接口的方法默认是public类型的,所以在实现的时候一定要用public来修饰(否则默认为protected类型,缩小了方法的使用范围)。

4)接口中无法定义成员变量,但是可以定义常量,其值不可以改变,默认使用public static final修饰。接口中的属性必然是常量,只能读不能改,这样才能为实现接口的对象提供一个统一的属性。

5)接口中所有非静态非默认的方法都必须是抽象方法。(默认方法和静态方法JDK8版本才出的)

6)接口中没有构造方法,不能创建对象。

7)如果一个类实现了一个接口,那么这个类的实例可以赋值给这个接口类型的变量。

8)接口中所有非静态非默认的方法都必须是抽象方法。

嵌套接口

定义在类或接口中的接口
嵌套接口的修饰符限制:不论在接口中,还是类中,嵌套接口默认强制是static。
接口定义在类中可以使用四种访问权限;定义在接口中,则只有public。

枚举类型

枚举类型的实例可以像引用静态方法或者成员变量的方式被引用,但是不可以被实例化。
枚举跟普通类一样可以用自己的变量、方法和构造函数,构造函数只能使用 private 访问修饰符,所以外部无法调用。
文档

构造函数

构造函数的函数名与类名相同,不用定义返回值类型。(不同于void类型返回值,void是没有具体返回值类型;构造函数是连类型都没有)。
当一个类中没有定义构造函数时,系统会给该类中加一个默认的空参数的构造函数,方便该类初始化。只是该空构造函数是隐藏不见的。

值传递

hashCode:散列码是由对象导出的一个整型值。散列码是没有规律的。类的hashCode()方法继承自Object类,因此每个对象都有一个默认的散列码,他的值为对象的存储地址(由对象的物理存储地址通过散列转换来的)。

package Day1;

public class Ex1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String a = "java";
		String b = "java";
		String c = "ja";
		String d = "va";
		String e = c+d;
		String f = a+b;
		System.out.println(a.hashCode());
		System.out.println(b.hashCode());
		System.out.println(c.hashCode());
		System.out.println(d.hashCode());
		System.out.println(e.hashCode());
		System.out.println(f.hashCode());
	}	
}

运行结果
在这里插入图片描述

访问控制

Java中不写访问控制符,默认为friendly类型,可以被同一个包中的类使用。

this关键字

this关键字指向的是当前对象的引用。如果不用this,会出现这种情况

public class Ex1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person p1 = new Person();
		p1.setName("Mike");
		p1.setGender("man");
		System.out.println("Name is "+p1.getName()+",sex is"+p1.getGender());

	}
	
}

class Person{
	private String name;
	private String gender;
	Person(){}
	Person(String name,String gender){
		this.name = name;
		this.gender = gender;
	}
	public void setName(String name){
		name = name;
	}
	public String getName(){
		return name;
	}
	public void setGender(String gender){
		gender = gender;
	}
	public String getGender(){
		return gender;
	}
}

运行结果
而用加了this的构造函数时

package Day1;

public class Ex1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person p1 = new Person("Mike","Man");
		System.out.println("Name is "+p1.getName()+",sex is "+p1.getGender());

	}
	
}

class Person{
	private String name;
	private String gender;
	Person(){}
	Person(String name,String gender){
		this.name = name;
		this.gender = gender;
	}
	public void setName(String name){
		name = name;
	}
	public String getName(){
		return name;
	}
	public void setGender(String gender){
		gender = gender;
	}
	public String getGender(){
		return gender;
	}
}

结果是这样

注解

@Override 对注解的方法进行检查(如名称拼错的情况)
在这里插入图片描述
注解不能改变程序的语义,只是提供编译或者运行时可选的元信息。

Lambda表达式

基本语法:
(parameters) -> expression

(parameters) ->{ statements; }
用Lambda表达式遍历集合


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值