------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
1、重写和重载
子父类关系中,子类中存在与父类中方法声明完全一样的方法叫重写
一句话:除了方法体以外其他都相同,但是子类修饰符权限要大于等于父类
一个类中或者子父类关系中存在多个同名方法,并且参数列表不同的方法 叫重载。
子父类关系中:子类中的方法和父类中的方法也可以构成重载关系
当子类需要父类的功能,而子类又有自己特有的方法时,可以重写父类的方法,这样既
可以使用父类的功能又可以定义子类特有的内容.
举例:父亲把武功传给儿子,儿子可以改进该武功,或者不改
方法重写:
子父类中,出现方法声明相同的情况。返回值、方法名、参数列表都要一样。
方法重载:
同一个类中或子父类中,方法名相同,参数列表不同,与返回值无关。
(5)子父类间重写需要注意的地方
A:父类中的私有方法不能被重写(就算有相同的,但私有的不能被继承,所以不算重写)
B:子类方法的访问权限修饰符要大于等于父类的访问权限修饰符
C:静态的方法只能重写静态方法
2、子父类间构造方法的执行顺序
(1)子类的构造方法默认都会去访问父类的无参构造方法,子类的构造方法都有默认语句:super()
为什么呢?
因为子类会自动具备父类中非私有数据,那么,这个数据只能靠父类完成。所以会先去调用父类的构造方法对数据进行初始化。
注意:构造方法中this() 或 super()一定要是第一行有效代码.
任何类都直接或间接访问了 Object 类中的构造方法. object 是所有类的超类。
注意:构造方法执行完后会创建该类的对象吗?
不一定,子类的构造方法第一行调用父类的构造方法时,不会创建对象
(3)子父类间静态代码块,代码块,构造方法执行顺序
注意:当创建多个对象的时候静态代码块每次运行只执行一次
class Zi
{
//静态代码块
static
{
System.out.println("zi 静态代码块");
}
//构造代码块
{
System.out.println("zi 构造代码块");
}
public Zi()
{
System.out.println("zi 构造方法");
}
}
class BlockCodeDemo
{
public static void main(String[] args)
{
Zi z = new Zi();
Zi z2 = new Zi();
}
}
初始化静态成员变量
4、构造代码块作用
A、把所有构造方法中共性内容抽取出来,提高代码的复用性
B、初始化非静态成员变量
3、final关键字的概述和使用
(1)概述
很多时候有些方法内容时不能被重写的。而父类方法声明为public就可以被重写。针对这种情况,我们可以做个标记,告诉别人这个不能被重写。
final关键字:最终的意思,可以修饰类,成员变量,成员方法
(1)概念-什么是多态
对象在不同时刻表现出来的不同状态。
A、要有继承关系
B、要有方法重写
C、要有父类引用指向子类对象(Fu fu = new Zi();)
(3)多态的成员特点
(4)多态的弊端与好处
1、父类引用不能直接使用子类对象的特有功能
如何解决这个问题?
答:向下转型 (就是强转)
格式 (子类)父类
2、好处
可以提高代码的扩展性和可维护性。
5、抽象类和抽象方法
(1)抽象类与抽象方法
抽象类:被abstract修饰的类
抽象方法:被abstract修饰,只有方法声明,没有方法体的方法。
(2)抽象类的特点
D、如果一个类继承抽象类,那么这个类要么本身也是抽象类。这个类必须重写父类的所有抽象方法。
(3)抽象类作用
强制子类必须实现某些功能。
(4)抽象类的成员特点
1、成员变量
可以有成员变量,也可以有常量。
2、构造方法
有构造方法,但是不能通过构造方法创建对象
问:既然不能被实例化,那么有构造方法有什么用?
答:可以用于子类访问父类数据前,对父类数据进行初始化。
3、成员方法
A、可以有抽象方法,也可以有非抽象方法。
B、非抽象方法和抽象方法的作用
抽象方法是为了要求子类做某些事情。
非抽象方法是为了提高代码复用性,被子类继承。
Final :被final修饰的方法不能被重写,而抽象方法最终都是要被重写的
Static :如果一个类被static修饰,方法可以被类名.方法名直接调用
Private:被 private 修饰的方法在子类中是看不见,所以这个抽象方法也是不能被重写的.
6、接口
特殊的抽象类,里面的方法全是抽象方法。
A、成员变量:接口中只有常量。(变量有默认的修饰符:public static final.)
B、成员方法:接口中的方法都是抽象的。(方法有默认修饰符public abstract)
interface Animal
{
public abstract void eat();
}
class Dog implements Animal
{
public void eat()
{
System.out.println("eat dog");
}
}
class InterfaceDemo
{
public static void main(String[] args)
{
//错误
//Animal a = new Animal();
Dog d = new Dog();
d.eat();
//接口多态
Animal a = new Dog();
a.eat();
}
}
(4)抽象类和接口的区别,类和接口的关系
1、抽象类和接口的区别
抽象类:
成员变量:可以是变量,也可以是常量。
成员方法:可以是抽象方法,也可以是非抽象方法。
构造方法:有构造方法。
接口:
成员变量:只能是常量。有默认修饰符:public static final
成员方法:只能是抽象方法。有默认修饰符:public abstract
构造方法:没有构造方法,不需要初始化数据。
2、类与接口的关系
类与类:
继承关系,只能单继承,可以多层继承。
类与接口:
实现关系,可以单实现,也可以多实现。
还可以在继承一个类的同时,实现多个接口。
接口与接口:
继承关系,可以单继承,也可以多继承。
3、抽象类与接口设计理念的区别
抽象类被继承,这个类中定义的是整个继承体现的共性内容。
体现:is a
接口被实现,这个接口中定义的是整个体现的扩展内容。
体现:like a
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------