java学习笔记(五)之面向对象

一、面向对象之继承

特点:

1、支持单继承

class SubDemo extends Demo{} //ok

class SubDemo extends Demo1,Demo2...//error

2、支持多成继承(继承体系)

class A{}
	• class B extends A{}
	• class C extends B{}

定义继承需要注意:

不要仅为了获取其他类中某个功能而去继承类与类之间要有所属( " is a " )关系,xx1是xx2的一种。

&&  super关键字:

super和this的用法相同 this代表本类应用 super代表父类引用当子父类出现同名成员时,可以用super进行区分子类要调用父类构造函数时,可以使用super语句。(必须放在第一行)

父类中的私有方法不可以被覆盖。在子类覆盖方法中,继续使用被覆盖的方法可以通过super.函数名获取。 

&& 函数覆盖:

子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为重写或者复写

父类中的私有方法不可以被覆盖。在子类覆盖方法中,继续使用被覆盖的方法可以通过super.函数名获取。

覆盖注意事项:

覆盖时,子类方法权限一定要大于等于父类方法权限(从private到default不算是覆写) 子类与父类同名属性也会出现覆盖静态只能覆盖静态。

覆盖的应用:

当子类需要父类的功能,而功能主体子类有自己特有内容时,可以复写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。

&&  final关键字:

final可以修饰类,方法,变量。 final修饰的类不可以被继承。 final修饰的方法不可以被覆盖。 final修饰的变量是一个常量。只能被赋值一次。 内部类只能访问被final修饰的局部变量。

&& 抽象类:(Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类。)

抽象就是从多个事物中将共性的,本质的内容抽取出来。

例如:狼和狗共性都是犬科,犬科就是抽象出来的概念。

1、抽象类和抽象方法必须用abstract关键字来修饰

2、抽象方法只有方法声明,没有方法体,定义在抽象类中

3、抽象类不可以被实例化,也就是不可以用new创建对象

4、抽象类通过其子类实例化,而子类需要覆盖掉抽象类中所有的抽象方法后才可以创建对象,否则该子类也是抽象类

5、抽象类中有构造函数,抽象关键字abstract不可以和final关键字共存,抽象类中可以没有抽象方法。

抽象类和普通类比较,除了多了一个抽象方法之外和不能实例之外没有什么不同

&& 接口:

格式:

interface {}

1、接口中的成员修饰符是固定的可以不写

2、接口的最大特点是可以多实现。

3、接口是一个标准

4、接口是程序的功能扩展

类、接口之间的关系:

类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。

接口与接口之间可以有多继承关系。

类可以同时继承抽象类和接口

二、面向对象之多态

体现:

父类或者接口的引用指向或者接收自己的子类对象。作用: 多态的存在提高了程序的扩展性和后期可维护性前提: • 需要存在继承或者实现关系 • 要有覆盖操作

成员函数: • 编译时:要查看引用变量所属的类中是否有所 调用的成员。

在运行时:要查看对象所属的类中是否有所调 用的成员。

成员变量: • 只看引用变量所属的类

抽象类和接口的区别:

1、抽象类是一个模板2、接口是一个标准

设计模式:

1、工厂设计模式3、适配器设计

例:

class Factory//工厂类
{
	public static Fruit get(String name)
	{
		Fruit f = null;
		if("苹果".equals(name))
		{
			f = new Apple();
		}
		if("橘子".equals(name))
		{
			f = new Orange();
		}
		return f;
	}
}
class ProxyCl implements Net//代理类,代理类可以实现更多的辅助功能
{
	private Net net;
	public ProxyCl(Net net)
	{
		this.net = net;
	}
	
	public boolean check()
	{
		boolean inf = true;
		return inf;
	}

	public void browse()
	{
		this.check();
		this.net.browse();
	}
}
适配器:在继承接口时,就必须全部实现接口中的方法,这样很多用不到的也要实现很麻烦,所有就有适配类的出现,即用一个抽象类并用抽象类里的空方法体来实现接口中的所有方法,然后从这个抽象类中继承,就可以有选择的实现相关方法

内部类:
将一个类定义在另一个类的里面,对里面那个类就称为内部类
特点:

• 内部类可以直接访问外部类中的成员,包括私有成
员。
• 而外部类要访问内部类中的成员必须要建立内部类
的对象。

class  InnerDemo
{
	public static void main(String[] args) 
	{
		new Outer().getInner().print();
	}
}

class Outer
{
	private String name = "haoren";
	class Inner
	{
		public void print(){
			System.out.println(name);
		}
	}
	public Inner getInner(){
		Inner in =  new Inner();
		return in;
	}
}
在外部访问内部类:

Outer outer = new Outer();
Outer.Inner in = outer.new Inner();
in.print();

使用static定义内部类:

class  InnerDemo
{
	public static void main(String[] args) 
	{
		//new Outer().getInner().print();
		new Outer.Inner().print();
	}
}

class Outer
{
	private static String name = "haoren";
	static class Inner
	{
		public void print(){
			System.out.println(name);
		}
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值