1.方法重载(Overload)表示两个或是多个方法名字相同,但是方法的参数不同.方法参数不同的两层含义:
1)参数不同.
2)参数的类型不同.注意:方法的返回值对重载没有任何影响.一定是由参数决定的,和返回值没有关系.
2.构造方法的重载:只要看参数即可.
this关键字:
public class ConstructorOverload
{
public ConstructorOverload()
{
this.(3);//this 表示第对当前对象的引用.
System.out.println(“test”);
}
public ConstructorOverload(int i)
{
System.out.println(++i);
}
public static void main(String [] args)
{
ConstructorOverload col = new ConstructorOverload();
}
}
如果想要在一个构造方法中调用另一个构造方法,可以使用this()的方式调用,this()括号中的参数表示目标构造函数的参数.this必须要放在构造函数的第一条语句的位置,之前不能有任何的可执行语句.
3.继承(Inheritance):Java是单继承的,表示一个类只能够从另一个类中继承,(被继承 的类叫做父类也叫做基类(base classs),
继承的类叫做子类),Java中的及继承使用extends关键字.
Child.java代码如下:
public class Child extends Parent
{
public Child()
{
System.out.println(“Child”);
}
public stratic void main(String [] agrs)
{
Child child = new Child;
}
}
class Parent
{
public Parent()
{
System.out.println(“parent”);
}
}
先执行父亲的构造函数,然后执行孩子的构造方法.
子类和父类对象在内存中是挨着放的.
4.当生成子类的对象时,Java默认首先调用父类的不带参数的构造方法.然后执行该构造方法,生成父类的对象,接下来再去调用子类的构造方法,生成子类对象.要想生成子类对象先要生成父类对象,没有父类对象就没有子类对象.
5.super表示对父类对象的引用,
6.如果子类使用super()显式调用父类的某个构造方法,那么在执行的时候就会寻找与super()所对应的构造方法而不会再去寻找父类的不带参数的构造方法.
7.对super的调用必须是构造方法的第一条语句.和this类似.
8.
public class InheritenceTest
{
Apple apple = new Apple();
System.out.println(apple.name);
}
class Fruit
{
String name="fruit";
}
class Apple extends Fruit
{
String name=”apple”;
}
关于继承的三点:
a)父类有的,子类也有.
b)父类没有的,子类可以增加.
c)父类有的子类可以改变.
9.关于继承的注意事项
①构造方法不能被继承.
②方法和属性可以被继承
③子类的构造方法的隐式的调用父类的不带参数的构造方法
④子类使用super关键字显式的调用父类的构造方法,super指的是对父类的引用.
⑤super关键字必须是构造方法中的第一行语句.
10.方法的重写(Override):子类与父类的方法返回类型一样,方法名称一样,参数一样,这样我们说子类与父类的方法构成了重写关系.
11.方法重写与方法重载之间的关系:重载发生在同一个类内部的两个或者多个方法.重写发生在父类与子类之间.重写一定是伴随着继承而发生的.重载时平行的关系,重写是一种层次关系.
12.当两个方法形成重写关系时,可以在子类方法中通过super.run()调用父类的run()方法,其中super.run()不必放在第一行语句,因此此时父类对象应经构造完毕,先调用父类的run()方法还是先调用子类的run()方法是根据程序的逻辑决定的.
13.在定义一个类的时候,如果没有显式的去指定该类的父类,那么该类就会继承于java.lang.Object类(JDK提供的一个类,Object类是Java中所有类的直接或间接父类).
14.多态(polymorphism):我们说子类就是父类(玫瑰是花,男人是人),因此多态的意思就是:父类型的引用可以指向子类的对象.指向谁就调用谁的方法.
Parent P = new Child();当使用多态方式去调用方法的时候,首先检查父类中是否有sing()方法,如果没有则编译错误;如果有,再去调用子类的sing()方法.
方法的重载不是多态
多态是一种运行期的行为
15.一共有两种类型的强制类型转换:
①向上的类型转换(upcast):比如说将Cat类型转换成Animal类型.即将子类型转换为父类型.对于向上类型转换,不需要显式的指定.
Cat cat = new Cat();
Animal animal = (Animal)cat;//可以不显式的强制类型转换.
animal.sing();
②向下的类型转换(downcast)比如将Animal类型转换为Cat类型.即将父类型转换为子类型.对于向下类型转换,必须要显式指定(必须要使用
Animal a = new Cat();
Cat cat = (Cat)a;
cat.sing();
为什么使用强制类型转换:
使用父类的引用,只能使用从父类继承来或是重写的方法,不能使用父类新增加的方法.所以...