java面向对象

继承

让类和类之间产生父子关系 ,子类可以很方便的使用父类的内容,解决类之间的代码重复问题

语法格式

//父类:动物
public class Animal{}

//子类:小猫
public class Cat extends Animal{}

特点

1、java是单继承(一个子类只能有一个父类)

public class A extends B(){}//正确
public class A extends B,C(){}//错误

2、java可以多层继承

public class A extends B(){}
public class B extends C(){}

3、Object是所有类的超类,一个没有继承关系的类,会默认继承超类
4、java中的继承是一种“假继承”,“伪继承”(子类初始化之前,会先完成父类的初始化,子类使用的 内容,其实是父类的对象)

重写(override)和重载(overload)

重写:父子类中有相同的方法

//父类:动物
public class Animal{
	public void eat(){
		System.out.println("吃东西");
	}
}

//子类:小猫
public class Cat extends Animal{
		public void eat(){
			System.out.println("小猫吃鱼");
	}
}

重载:在一个类中(前提),相同的方法名,不同的参数

public class Person{
	public void buy(String commodity){
		System.out.println("我买了"+commodity);
	}
	
	public void buy(String commodity,int money){
		System.out.println("我买"+commodity+"用了"+money+"元");
	}
}

this和super的关系

this 当前的对象
super 父类的对象
this.  super. 获得对应的内容(用谁点谁)
this() super() 获得对应的构造器 -->必须是代码的第一行
在所有的构造器中 你不写的话 会默认调用父类的无参数构造super()

抽象类是特殊的父类
抽象类中有要求子类必须实现的方法

抽象类的定义

//抽象类
public abstract class Psrson{
	//抽象方法,子类必须实现
	//只有方法的定义,没有方法的代码实现
	public abstract void speak();
}

注意:
1、抽象类中一定有抽象方法吗?不一定
2、抽象方法所在的一定是抽象类吗?不一定,例如,抽象类和接口
3、抽象类能实例化吗?不能
4、抽象类中有构造器,自己不能使用,给子类赋值使用

接口

一系列规范的汇总

特点:
1、全部是抽象方法
2、全部是静态常量
3、接口和类之间是实现关系,可以多实现

public interface Message{
	public abstract void send();
}

public interface Call{
	public abstract void find();
}

//接口和类之间是实现关系,可以多实现
public class Phone implement Message,Call(){

		public abstract void send(){
			System.out.println("发邮件");
		}
		
		public abstract void find(){
			System.out.println("找人");
		}
}

接口和抽象类的区别

抽象类

在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。抽象类的特点:

a、抽象类不能被实例化只能被继承;

b、包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法;

c、抽象类中的抽象方法的修饰符只能为public或者protected,默认为public;

d、一个子类继承一个抽象类,则子类必须实现父类抽象方法,否则子类也必须定义为抽象类;

e、抽象类可以包含属性、方法、构造方法,但是构造方法不能用于实例化,主要用途是被子类调用。

接口

Java中接口使用interface关键字修饰,特点为:

a、接口可以包含变量、方法;变量被隐士指定为public static final,方法被隐士指定为public
abstract(JDK1.8之前);

b、接口支持多继承,即一个接口可以extends多个接口,间接的解决了Java中类的单继承问题;

c、一个类可以实现多个接口;

d、JDK1.8中对接口增加了新的特性:
(1)、默认方法(default method):JDK
1.8允许给接口添加非抽象的方法实现,但必须使用default关键字修饰;定义了default的方法可以不被实现子类所实现,但只能被实现子类的对象调用;如果子类实现了多个接口,并且这些接口包含一样的默认方法,则子类必须重写默认方法;
(2)、静态方法(staticmethod):JDK
1.8中允许使用static关键字修饰一个方法,并提供实现,称为接口静态方法。接口静态方法只能通过接口调用(接口名.静态方法名)。

多态 对象的多种形态

具体的代码实现:

public class Fu(){}

public class Zi extends Fu(){}

Fu fu = new Zi();

多态的前提:

1、有继承或者实现关系、
2、父类引用指向子类对象

多态的优点和缺点

优点:扩展性强,父类的变量可以赋值不同的子类对象,而调用不同的子类重写的方法
缺点:用不了子类的特性,想要使用必须强制向下转型

多态中的方法调用问题
1、多态产生,子类只能调用父类存在的方法

public class A(){
	public void buy(){
		System.out.println("购物");
	}

	public void eat(){
		System.out.println("吃东西");
	}
}

public class B extends A(){
	public void buy(){
		System.out.println("买手机");
	}
}

public class C(){
	public static void main(String args[]){
		//多态产生
		A a = new B();
		a.buy();//买手机
		a.eat();//吃东西
	}
}

2、多态产生,父类有该方法,子类没有该方法,则向上查找,执行父类的方法

public class A(){
	public void buy(){
		System.out.println("购物");
	}
}

public class B extends A(){
}

public class C(){
	public static void main(String args[]){
		//多态产生
		A a = new B();
		a.buy();//购物
	}
}

3、如果多态产生,父类有该方法,子类也有该方法,

public class A(){
	public void buy(){
		System.out.println("购物");
	}
}

public class B extends A(){
	public void buy(){
		System.out.println("买游戏机");
	}
}

public class C(){
	public static void main(String args[]){
		//多态产生
		A a = new B();
		a.buy();//买游戏机
	}
}

多态产生时,我们可以向下转型(强制类型转换)消除多态的弊端,但是向下转型可能出现 类型转换错误 , 必须是该类型的多态转换执行类型可以使用 instance 来判断 保存成功

public class A(){
	public void buy(){
		System.out.println("购物");
	}
}

public class B extends A(){
	public void buy(){
		System.out.println("买游戏机");
	}
}

public class C(){
	public static void main(String args[]){
		A a = new B();
		//判断
		if(B instanceof A){
			//向下强制类型转换
			B b = (B) a;
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值