ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java学习笔记(六)

2021-10-28 20:02:40  阅读:157  来源: 互联网

标签:Java abstract void 笔记 学习 接口 interface 抽象类 public


Java学习笔记(六)

初始化块

用{代码块}对Java对象进行初始化,也可以被static修饰,此时称为静态代码块,只能访问静态方法和变量
程序的执行顺序如下:

  1. 声明成员变量的默认值及显示初始化
  2. 多个初始化块依次执行(静态只执行依次一次且优于非静态执行 ,非静态执行多次)
  3. 构造器对成员进行赋值

静态代码块常常用来对静态成员变量进行赋值,非静态代码块常常用在匿名内部类中,用代码块替代构造方法:

// 这是一个Person的匿名子类(可以看出子类独有的重写标志),此时要想改变父类的属性值(又不能重写构造方法,因为没有名字),可以通过代码段来代替构造方法(Java高级编程)
Person p=new Person(){
	{
		super.name="李四";
	}
	@Override
	public void test(){
		//TODO
	}
}

final

  1. 修饰类不可以继承
  2. 修饰方法不可以重写
  3. 修饰变量为常量(最好为大写)

抽象类 abstract

将父类设计的十分抽象,以至于其没有具体的实例

  1. 抽象方法,只有方法的声明,以分号结束:abstract int abstractMethod(int a); 含有抽象方法的类都必须被声明为抽象类
  2. 抽象类不能实例化

模板方法设计模式(TemplateMethod)

利用抽象类的设计模式,将确定的部分实现,将不确定的部分暴露给子类去实现

public abstract class Template{
	public abstract void code();
	public final void getTime(){
		long start=System.currentTimeMillis();
		code();
		long end=System.currentTimeMIllis();
		
		System.out.println("code方法执行时间:"+(end-start));
	}
}

接口(interface)

利用接口实现多重继承的效果,接口是一种特殊抽象类,这种抽象类中只包含常量和方法的定义而没有实现(相当于声明语句)。接口也可以直观理解为一类事物一系列动作的定义

  • 定义 interface
  • 所有成员都是public static final
  • 所有方法都是public abstract
  • 没有构造器
  • 接口可以采用多层继承机制
  • 接口和类也存在多态
    抽象类增加新的抽象方法存在的问题
    图一

如果抽象类增加抽象方法,则子类必须实现该抽闲方法,否则将改为抽象类
在这里插入图片描述

引入接口后,可以在新建的接口中新增抽象方法而不必改变父类,在必要时实现接口。
用Java描述会唱歌的厨子是个老师/font>
在这里插入图片描述

public abstract class Person{
	int age;
	String name;
	int sex;
}
public interface Cooking{
	void fry();
}
public interface Singing{
	void sing();
}
public SCTercher extends Person implements Cooking,Singing{
	string course;
	@Override
	public void fry(){
	}
	public void sing(){
	}
}

工厂方法(FactoryMethod)

将对象创建工作延迟到了子类
在这里插入图片描述

在合作开发的场景中,开发人员A设计BWM类,而开发人员B需要使用BWM的对象,如果直接使用对应BWM类进行对象的创建,当BWM改名时,会导致对象的创建也需要改名:
此时通过定义interface BWM和interface BWMFactory,并利用多态性质即可解决这个问题。

内部类

与外部类对应的是内部的类,外部类得new内部类对象才能访问内部类,内部类访问外部类对象可以通过类名.this.xx来访问
内部类可以变相解决多重继承问题

class A{
	private class InnerB extends B{
		@Overwrite 
		public void testB(){
		}
	}
	private class InnerC extends C{
		@Overwrite
		public void testC(){
		}
	}
}
class B{
	public void testB(){};
}
class C{
	public void testC(){};
}

总结

在这里插入图片描述

标签:Java,abstract,void,笔记,学习,接口,interface,抽象类,public
来源: https://blog.csdn.net/m0_46384193/article/details/121011707

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有