2019/4/4

今日计划(已经完成的):

看了一篇图像分割的文献
《疯狂的java讲义》——149~169

阅读笔记:

  • 关于多态:
    多态是指编译的时候是父类型,运行的时候是子类型,每一个子类型都重写父类型的某个函数a。在运行的时候每个子类型都会执行自己相对性的函数a,这样就实现了多态。
    由于编译的时候是父亲类型,所以只能调用父亲的方法,或者是父类型和子类型都有的方法,不能调用子类型有但父类型没有的方法。
    对比一下这两个程序的运行结果就有所明白:
package practice;


class base1{
	//准备一个方法
	public void haha() {
		System.out.println("父类型的函数haha");
	}
	
	void test(int a) {//会被子类型重写的函数

		System.out.println("父类型的test:"+a);
	}
}


class base2 extends base1{
	void test(int a) {//会被子类型重写的函数
		System.out.println("base2子类型的test"+a);
	}
}
//函数重载,三种不同的方式
public class base3 extends base1{
	
	void test(int a) {//会被子类型重写的函数
		System.out.println("base3子类型的test"+a);
	}
	
	public static void main(String[] args) {
			base1 b=new base2();
			base1 bb=new base3();//创建两个对象
			
			b.test(1);
			bb.test(2);
	}
}

VS

class base1{
	//准备一个方法
	public void haha() {
		System.out.println("父类型的函数haha");
	}
	
	void test(int a) {//会被子类型重写的函数

		System.out.println("父类型的test:"+a);
	}
}


class base2 extends base1{
	void test() {//会被子类型重写的函数
		System.out.println("base2子类型的test");
	}
}
//函数重载,三种不同的方式
public class base3 extends base1{
	
	void test() {//会被子类型重写的函数
		System.out.println("base3子类型的test");
	}
	
	public static void main(String[] args) {
			base1 b=new base2();
			base1 bb=new base3();//创建两个对象
			
			b.test(1);
			bb.test(2);
	}
}

在这里插入图片描述

  • 关于实例变量
    -
    【代码如下】:
class base1{
	public String name="cheng";
	//准备一个方法
	public void haha() {
		System.out.println("父类型的函数haha");
	}
	
	void test(int a) {//会被子类型重写的函数

		System.out.println("父类型的test:"+a);
	}
}


class base2 extends base1{
	public String name="yi";
	void test() {//会被子类型重写的函数
		System.out.println("base2子类型的test");
	}
}
//函数重载,三种不同的方式
public class base3 extends base1{
	public String name="ming";
	void test() {//会被子类型重写的函数
		System.out.println("base3子类型的test");
	}
	public static void main(String[] args) {
			base1 b=new base2();
			base1 bb=new base3();//创建两个对象
			
			b.test(1);
			System.out.println(b.name);
			bb.test(2);
			System.out.println(bb.name);
	}
}

  • 引用变量的强制类型转换
    在这里插入图片描述也就是说:子类实例可以随时转换成父类实例,但是父类实例只有在实际上是子类实例时才能转换成子类型。对于数值类型来说,可以随意转换。

  • instanceof运算符
    在这里插入图片描述在这里插入图片描述

存在继承关系,可以使用instanceof运算,也就是说编译可以通过。如果不存在继承关系,压根没法通过编译。

  • 继承与组合
    在这里插入图片描述在这里插入图片描述final修饰一个类,它将不能够被继承。

1、组合需要传递参数
在这里插入图片描述
2、组合的时候需要对类进行初始化,并将其设置成private属性,比较安全,参看155面例子。
3、使用组合关系并不意味着更大的开销,使用继承的时候一样要对父类进行初始化。

  • 初始化块
    1、不论初始化块是在主函数的前面还是后面,都在这个类的构造函数之前执行。
    2、初始化块相当于将构造函数中无参的部分拿出来了,使得代码更加健壮提高可维护性。
    3、若有多个初始化块,按顺序执行。
    4、
package practice;

public class Base2  {
	
	public  static void main(String[] args) {
		Base2 b2=new Base2();
		System.out.println(b2.name);
		
		
	}
	{
		name="yi";
		
	}
	public String name="cheng";
}

这个程序的结果是"cheng",也就是说,初始化块和变量初始化的效果一样。
5、
在这里插入图片描述在这里插入图片描述

  • 静态初始化块:
    1、【代码示例】:
    在这里插入图片描述在这里插入图片描述
    结果:
    在这里插入图片描述
    解释:
    在这里插入图片描述
  • 关于包装类的相互转化

猜你喜欢

转载自blog.csdn.net/the_little_fairy___/article/details/89035599
今日推荐