Java类-修饰符,封装,继承,多态

理顺一下Java类的相关知识:
1、封装
(1)private,default,protected,public修饰符

权限大小 private<default<protected<public

  private default protected public
同一个类内
同一个包内  
子类中    
全局      

顶级类也可以添加修饰符,但只能添加public或者默认的修饰符。使用public修饰符,则可以全局都可以访问,如果使用default访问,那么只能在包内访问。

访问控制符的使用原则:

<1>类的绝大部分属性都应该使用private修饰,除了一些static修饰的、类死于全局变量的属性才考虑使用public修饰。除此之外,有些方法只是用于辅助实现该类的其他方法,这写方法被称为工具方法,工具方法也应该使用private修饰。

<2>如果某个类主要用作其他类的符类,该类中包含的大部分方法可能仅仅希望被其子类重写,而不想被外界直接调用,应该使用protected修饰符来修饰。

<3>希望暴露给其他类自由调用的方法应该使用public来修饰,因此类的构造器通常使用public修饰符,大部分顶级类都应该用public修饰。

(2)、package和import

一般根据功能划分,将相近的功能放在一个包内,一般包的名字可以表示包的继承关系,比如me.happyhls 和 me.happyhls.A

import 则是为了简化使用,将package封装好的包直接引用进来,方便调用。

 

2、类的继承

(1)、每创建一个子类对象,就会相应的创建一个父类的对象。使用sper关键字的时候,总会指向this对应子类所对应的父类对象。

(2)、Java的类可以分为 类class、抽象类abstract class、接口interface

其中类class可以 extends 类、抽象类、也可以implements 接口

抽象类可以extends类、抽象类、也可以implements接口

接口只能extends接口

比较容易记住的是一个 类class如果继承了接口,那么必须实现接口中的全部方法,如果一个抽象类abstract class继承了接口,可以实现,也可以不实现接口中的类。

 

3、类的多态

(1)、类的多态就是 Base b = new Derived();

(2)、我写了这样一个例子

interface Fruit
{
	public String getName();
	public void eatFruit();
}

class Apple implements Fruit
{
	String name="Apple";
	public String getName()
	{
		return this.name;
	}
	public void eatFruit()
	{
		System.out.println("I eat an/a "+this.getName());
	}
}
class Orange implements Fruit
{
	String name="Orange";
	public String getName()
	{
		return this.name;
	}
	public void eatFruit()
	{
		System.out.println("I eat an/a "+this.getName());
	}
}
class Banana implements Fruit
{
	String name="Banana";
	public String getName()
	{
		return this.name;
	}
	public void eatFruit()
	{
		System.out.println("I eat an/a "+this.getName());
	}
}

class EatFruit{
	public static void eatFruit(Fruit fruit)
	{
		fruit.eatFruit();
	}
}

public class Polymorphism
{
	public static void main(String[] args)
	{
		EatFruit.eatFruit(new Apple());
		EatFruit.eatFruit(new Orange());
		EatFruit.eatFruit(new Banana());
	}
}

运行结果为

I eat an/a Apple
I eat an/a Orange
I eat an/a Banana

我的理解是多态目的在于调用同样一个函数,但实现的功能各有区别,一般有3个条件
<1>继承父类的类,如上面的Fruit接口
<2>重写父类的方法,如上面的Apple,Orange,Banana类
<3>调用的时候调用父类的方法,如上面中

public static void eatFruit(Fruit fruit)

通俗的理解就是,你养了小猫、小狗,你喊一句吃饭啦,都去吃饭,但小猫吃的是猫粮,小狗吃的狗粮。就这样。
 

 

About: happyhls


发表评论

电子邮件地址不会被公开。 必填项已用*标注