您的位置:首页 > 编程语言 > Java开发

2、Java面向对象笔记(继承)(抽象类)(多态)

2015-04-20 22:43 260 查看
Java面向对象笔记(继承)

继承思想:查阅父类功能,创建子类对象使用功能

一个子类只能有一个父类

this代表本类引用

super代表父类引用

子父类中的函数

当子类出现和父类一模一样的函数时

当子类对象调用该函数,会运行子类函数的内容

如同父类的函数被覆盖一样。

这种情况是函数的另一个特性:重写(覆盖)

?

当子类继承父类,沿袭了父类的功能到子类中

但是子类虽具备该功能,但是功能的内容却和父类不一致

这时,没有必要定义新功能,而是使用覆盖技术,保留父类的功能定义,并重写功能内容

覆盖注意事项:

1、子类覆盖父类,子类权限必须大于或者等于父类权限才可以覆盖,否则编译失败。

2、静态只能覆盖静态(优先级原因)

3、重载:只看同名函数的参数列表。

4、重写:子父类方法要一模一样,包括返回值也要一样。

package com.itheima;
class Extends1
{
	String ExtendsTool()
	{
		System.out.print("李鸿章");
		return "";
	}
}
class Extends2 extends Extends1
{
	String ExtendsTool()
	{
		System.out.print("袁世凯");
		return "";
	}
}
public class ExtendsDemo extends Extends1 {

	public void main(String[] args)
	{
		Extends2 e = new Extends2();
		String name = e.ExtendsTool();
		System.out.println(name);
	}
}


Java面向对象笔记(抽象类)

抽象类特点:

1、抽象方法一定放在抽象类里面

2、抽象方法跟抽象类都必须被abstract关键字修饰

3、抽象类不可以用new创建,因为调用抽象方法没意义

4、抽象类中的方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。

当多个类中出现相同功能,但是功能主体不同,

这是可以进行向上抽取。这时,只抽取功能定义,而不是抽取功能主体。

抽象类跟一般类没太大的区别。

该如何描述事务,就如何描述事物,只不过,该事物出现了一些看不懂的东西。

这些不确定的部分,也是该事物的功能,需要明确出现。但是无法定义主体。

public class AbstractDemo {
 
    public static void main(String[] args)
    {
        Base base = new Base();
        Adv adv = new Adv();
        base.Study();
        adv.Study();
    } 
}
abstract class Student
{
    abstract void Study();
} 
class Base extends Student
{
    void Study()
    {
        System.out.println("李鸿章");
    }
}
class Adv extends Student
{
    void Study()
    {
        System.out.println("袁世凯");
    }
}


Java面向对象笔记(多态)

1、多态的体现

父类的引用指向自己的子类对象

父类的引用也接收自己的子类对象

1

2

Animal cat = new Cat();

Animal dog = new Dog();

如果想要调用子类的特有方法时

强制将父类的引用 转换成子类类型

1

Cat c = (Cat)cat

多态自始至终都是子类对象在做变化

?

2、多态的前提

必须是类与类之间有关系,要么继承,要么实现。

通常还有一个前提:存在覆盖

3、多态的好处

多态的出现提高程序的扩展性。

4、多态的弊端

提高了扩展性,但是只能使用父类的引用访问父类中的成员

package com.hupingyan.DuoTai;
public class DuoTai {

	public static void main(String[] args) 
	{
		DoStudent ds = new DoStudent();
		ds.doSome(new baseStudent());
		ds.doSome(new advStudent());		
	}
}
class DoStudent
{
	public void doSome(Student stu)
	{
		stu.Study();
		stu.sleep();
	}
}
abstract class Student
{
	public abstract void Study();
	public void sleep()
	{
		System.out.println("睡觉");
	}
}
class baseStudent extends Student
{
	public void Study()
	{
		System.out.print("学习Java");
	}
	//public void sleep(){}
}
class advStudent extends Student
{
	public void Study()
	{
		System.out.print("学习HTML");
	}
	//public void sleep(){}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: