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

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(){}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值