------------------------------------------------------------------------------------------------------------------------------------------------------------------------
构造代码块
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
静态代码块
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
对象的初始化过程
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
单例设计模式
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
覆盖注意事项:
1、子类覆盖父类,必须保证子类权限大于等于父类权限,
才可以覆盖,否则编译失败。
2、静态只能覆盖静态。
记住:
重载:只看同名函数的参数列表
重写:子父类要一模一样,包括返回值类型。
特殊情况:在多态中,父类方法的返回值类型和子类方法
的返回值类型是可以有不同的。但是,这两个
参数类型得有关系才行,待续。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
子类的实例化过程
//子类的实例化过程
/*
结论:
子类的所有的构造函数,默认都会访问父类中空参数的
构造函数。因为子类每一个构造函数内的第一行都有一
句隐饰super();
当父类中没有空参数的构造函数时,子类必须手动通过
super语句形式来指定访问父类中的构造函数。
当然:子类的构造函数第一行也可以手动指定this语句
来访问本类中的构造函数,子类中至少会有一个构造函数
会访问父类中的构造函数。
*/
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
模板方法设计模式
/*
需求:获取一段程序运行的时间
原理:获取程序开始和结束的时间并相减即可
获取时间:System.currentTimeMillis();
当代码完成优化后,就可以解决这类问题。
这种方式,叫做模板方法设计模式。
什么是模板方法?
在定义功能时,功能的一部分是确定的,一部分是不确定的,而确定的部分在使用不确定的部分,
那么这时就将不确定的部分暴露出去,由该类的子类去完成。
这种设计模式提高了扩展性,也提高了复用性。
*/
abstract class GetTime
{
public final void getTime()
{
long start = System.currentTimeMillis();
runcode();
long end = System.currentTimeMillis();
System.out.println("毫秒:"+(end-start));
}
public abstract void runcode();
}
class SubTime extends GetTime
{
public void runcode()
{
long start = System.currentTimeMillis();
for(int x=0; x<4000;x++)
{
System.out.print(x);
}
}
}
class TemplateDemo
{
public static void main(String[] args)
{
// GetTime gt = new GetTime();
SubTime gt = new SubTime();
gt.getTime();
}
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
多 态
1、
class Fu
{
static int num = 5;
void method1()
{
System.out.println("fu method_1");
}
void method2()
{
System.out.println("fu method_2");
}
}
class Zi extends Fu
{
int num = 8;
void method1()
{
System.out.println("zi method_1");
}
void method3()
{
System.out.println("zi method_3");
}
}
class DuoTaiDemo
{
public static void main(String[] args)
{
Fu f = new Zi();
System.out.println(f.num);
Zi z = new Zi();
System.out.println(z.num);
}
}
结果:5 8
class Fu
{
static int num = 5;
void method1()
{
System.out.println("fu method_1");
}
void method2()
{
System.out.println("fu method_2");
}
static void method4()
{
System.out.println("fu method_4");
}
}
class Zi extends Fu
{
static int num = 8;
void method1()
{
System.out.println("zi method_1");
}
void method3()
{
System.out.println("zi method_3");
}
static void method4()
{
System.out.println("zi method_4");
}
}
class DuoTaiDemo
{
public static void main(String[] args)
{
Fu f = new Zi();
f.method4();
}
}
结果是:fu method_4
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
接口和多态的综合运用
/*
需求:
电脑运行实例,
电脑运行基于主板。
*/
interface PCI
{
public void open();
public void close();
}
class MainBoard
{
public void run()
{
System.out.println("mainboard run");
}
public void usePCI(PCI p)//PCI p = new NetCard();
{ //接口型引用指向自己的子类对象。
if(p!=null)
{
p.open();
p.close();
}
}
}
class NetCard implements PCI
{
public void open()
{
System.out.println("netcard open");
}
public void close()
{
System.out.println("netcard close");
}
}
class SoundCard implements PCI
{
public void open()
{
System.out.println("SoundCard open");
}
public void close()
{
System.out.println("SoundCard close");
}
}
class DuoTaiDemo
{
public static void main(String[] args)
{
MainBoard mb = new MainBoard();
mb.run();
mb.usePCI(null);
mb.usePCI(new NetCard());
mb.usePCI(new SoundCard());
}
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------