面向对象下总结

本文详细介绍了Java面向对象的高级特性,包括抽象类、final关键字、接口、多态及内部类的概念、特点与应用场景,帮助读者深入理解这些概念并掌握其使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、抽象类总结:

package com.laobi.day09;

public class AbstratorDemo {
	/**
	 * 抽象类:
	 * 抽象:笼统,模糊,看不懂!不具体
	 * 
	 * 特点:
	 * 1、方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰
	 *    抽象方法必须定义在抽象类中,该类必须也被abstract修饰
	 * 2、抽象类不可以实例化。为什么?因为调用抽象方法没意义
	 * 3、抽象类必须有其子类覆盖了所以方法后,该子类才可以实例化,
	 *   否则这个子类还是抽象类
	 *   
	 *1、抽象类中有构造函数吗?
	 *有,用于给子类对象进行初始化
	 *2、抽象类可以不定义抽象方法吗?
	 *可以的,但是很少见,目的就是不让该类创建对象。AWT的适配器对象就是这种类
	 *3、抽象关键字不可以和哪些关键字共存?
	 *private 不行
	 *static  不行
	 *final   不行
	 *4、抽象类和一般类的区别?
	 *相同点:
	 *   抽象类和一般类都是用来描述事物的,都在内部定类成员
	 *不同店:
	 *   1、一般类有足够的信息描述事物
	 *      抽象类描述事物的信息有可能不足
	 *   2、一般类中不能定义抽象方法,只能定义非抽象方法
	 *      抽象类中可以定义抽象方法,同时也能定义非抽闲方法
	 *   3、一般类可以被实例化
	 *      抽象类不可以被实例化
	 *5、抽象类一定是个父类吗?
	 *是的,因为需要子类覆盖其方法后才可以对子类实例化 
	 */

}
class DemoA extends Demo
{
	void show()
	{
		System.out.println("DemoA show");
	}
}
class DemoB extends Demo
{
	void show()
	{
		System.out.println("DemoB show");
	}
}
abstract class Demo
{
	abstract void show();
}

2、final关键字讲解:

package com.laobi.day09;

public class Final {
	/**
	 * final关键字
	 * 1、final是一个修饰符,可以修饰类,方法,变量
	 * 2、final修饰的类不可以被继承
	 * 3、final修饰的方法不可以被覆盖
	 * 4、final修饰的变量是一个常量,只能赋值一次  
	 * 为什么要用final修饰变量?
	 * 其实在程序中,如果一个数据是固定的,那么直接使用这个数据就可以了,
	 * 但是这样阅读行性差,所以给该数据起个名称。
	 * 而且这个变量名称的值不能变化,所以加上final固定
	 */
	public static void main(String[] args) {
		new Zi();
	}

}
 class Fu
{
	void method()
	{
//		System.out.println("gogogo");
	}
}
class Zi extends Fu
{
	void method()
	{
		System.out.println("Running");
	}
}
3、接口部分:
package com.laobi.day09;

public class InterfaceDemo {
	/*
	 * 接口
	 * 接口中的成员都是公共的权限
	 * 
	 * 类与类之间是继承关系,类与接口之间是实现关系
	 * 
	 * 接口不可以实例化
	 * 只能由实现了接口的子类并覆盖了接口中所有的抽象方法后
	 * 该子类才可以实例化,否则,这个子类就是一个抽象类
	 * 
	 * 在java中不直接支持多继承,因为会出现调用的不确定性,
	 * 所以java将多继承机制进行改良,在java中变成了多实现
	 * 
	 * 一个类可以实现多个接口
	 * 
	 * 接口的特点:
	 * 1、接口是对外暴露的规则
	 * 2、接口是程序扩展的功能
	 * 3、接口的出现降低耦合性
	 * 4、接口可以用来多实现
	 */
	public static void main(String[] args) {
		Te t = new Te();
		t.show();
		
	}

}
interface A
{
	public void show();
}
interface B
{
	public void show();
}
class Te implements A,B
{
	public void show()
	{
		System.out.println("fuck");
	}
}

//接口到出现避免了单继承到局限性
interface CC
{
	void show();
}
interface MM
{
	void method();
}
interface QQ extends CC,MM
{
	//接口与接口之间是继承关系,而且支持多继承
	void function();
}
class WW implements QQ
{
	public void show(){}
	public void method(){}
	public void function(){}
}
4、接口与抽象类的区别:

相同点:

 都是不断向上抽取而来的

 

 不同点:

 1、抽象类需要被继承,而且只能是单继承

    接口需要被实现,而且可以多实现

 2、抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法

    接口中只能定义抽象方法,必须由子类去实现

 3、抽象类的继承,是is a关系,在定义该体系的基本共性内容

    接口的实现是like a关系,在定义体系额外功能

5、多态总结:

package com.laobi.day10;

public class DuoTai {
	/**
	 * 多态:某一事物的多种形态,简单说,就是一个对象对应着不同类型
	 * 
	 * 多态在代码中的体现:
	 *    父类或者接口的引用指向其子类的对象
	 *
	 * 多态的好处:
	 * 提高了代码的扩展性,前期定义的代码可以使用后期的内容 
	 * 
	 * 多态的弊端:
	 * 前期定义的内容不能使用(调用)后期子类的特有内容
	 * 
	 * 多态的前提:
	 * 1、必须有关系,继承,实现。
	 * 2、要有覆盖
	 * 
	 */
	public static void main(String[] args) {
		method(new Cat());
		Animal a = new Cat();
		a.eat();
		Cat c = (Cat) a;//向下转型的目的是为了使用子类中的特有方法
		//注意:对于转型,自始至终都是子类在做着类型的变换
		c.eat();
	}
	public static void method(Animal a)
	{
		a.eat();
		if(a instanceof Cat)
		{
			//instanceof:用于判断对象的具体类型,只能用于引用数据类型判断
			Cat c = (Cat) a;
			c.catchMouse();
		}
	}

}
abstract class Animal
{
	abstract void eat();
}

class Dog extends Animal
{
	void eat()
	{
		System.out.println("啃骨头");
	}
	
}
class Cat extends Animal
{
	void eat()
	{
		System.out.println("吃鱼");
	}
	void catchMouse()
	{
		System.out.println("抓老鼠");
	}
}
6、多态的特点:
package com.laobi.day10;

public class DuoTai3 {
	/**
	 * 多态的特点:
	 * 成员函数:
	 *    编译时,要查看引用变量所属的类中是否有所调用的成员
	 *    在运行时,要查看对象所属的类中是否有所调用的成员
	 *    简单说,编译看左边,运行看右边
	 * 成员变量:
	 *    只看引用变量所属的类
	 *    简单说,编译和运行都看等号左边
	 * 静态函数:
	 *    编译时:参考引用型变量所属的类中是否有调用的静态方法
	 *    运行时:参考引用型变量所属的类中是否有调用的静态方法
	 *    简单说,编译和运行都看左边
	 *    
	 *    其实对于静态方法,是不需要对象的,直接调用类名即可
	 */
	public static void main(String[] args) {
		Zi z = new Zi();
		System.out.println(z.num);
		Fu f = new Zi();
		f.show();
		f.method();
		System.out.println(f.num);
	}

}
class Fu
{
	int num = 3;
	void show()
	{
		System.out.println("fu show");
	}
	static void method()
	{
		System.out.println("fu static");
	}
}
class Zi extends Fu
{
	int num = 4;
	void show()
	{
		System.out.println("zi show");
	}
	static void method()
	{
		System.out.println("zi static");
	}
}
7、内部类:
package com.laobi.day10;

public class NeiBuLei {
	/**
	 * 内部类:将一个类定义在另一个类的里面,对里面那个类就称为内部类
	 * 
	 * 访问特点:
	 * 1、内部类可以直接访问外部类的成员,包括偶私有成员
	 * 2、而外部类要访问内部类中的成员必须要建立内部类的对象
	 * @param args
	 */
	public static void main(String[] args) {
		
	}

} 
class Outer
{
	private int num = 3;
	class inner
	{
		void show()
		{
			System.out.println("show run..."+num);
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值