Java知识点总结

要毕业了啊,要找工作了啊,可是学的什么都忘了,所以现在争取在3月30号之前把Java和Android扫一遍。

求工作啊!大哭

之后要悲剧的准备雅思了,明天开始要准备过猪狗不如的生活了。呀呀,好好学英语,好好写代码,天天向上啊。这次英语过7.5吧。神~保佑。当然我会加油的啦。大笑


1.重载

java中允许同一个类里定义多个同名方法,只要形参列表不同就行。如果同一个类中包含了两个或者两个以上的方法名相同,但形参列表不同,则被称为方法重载。


在Java程序中确定一个方法需要三个要素:

  • 调用者,也就是方法的所属着,既可以是类,也可以是对象;
  • 方法名,方法的表示
  • 形参列表
注意:方法重载的要求就是同一个类中方法名相同,参数列表不同。至于方法的其他部分例如,方法返回值类型,修饰符等,,与方法重载没有关系。

2.包机制

Java引入包机制,提供了类的多层命名空间,用于解决命名冲突、类文件管理等问题。Java一般将一组功能相关的类放在同一个Package下

3.重写

重写一般使用的情况是在子类继承父类的情况下使用的。子类可以冲父类那里继承某个方法,但是那个方法对子类来说可能是不适用的。所以我们需要重写父类的方法。重写又叫做覆盖。
覆盖所遵循的原则是:
  • 重写的方法必须方法名相同,形参列表相同,也就是函数要有相同的签名。但是方法体可以不同。
  • 子类的返回类型应比父类的方法返回类型更小或者相等
  • 子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或者相等。
  • 子类的访问控制权限应比父类方法的访问控制权限更大或者相等。
注意:子类覆盖了父类的方法之后,子类的对象将无法访问父类中被覆盖的方法,但可以在子类中调用父类被覆盖的方法。如果子类需要在子类中调用父类中被覆盖的方法,则可以使用super(被覆盖的实例方法)或者父类类名作为调用者来调用父类中被覆盖的方法。
重写是针对子类可以访问的的方法来说的,如果父类中有private的访问权限,则该方法中定义了一个与父类private方法具有相同的方法名、相同的形参列表、相同的返回值类型的方法,依然不是重写。

this不能出现在static修饰的方法中,super也不能出现在static修饰的方法中。
重载的和重写的英文是overload和override两个的应用场景不同。重载一般发生在同一个类当中,重写发生在子类和父类之间。

4.Java中的多态

重写可以算Java 中多态中的一种。下面先看一下以下这段代码:

class BaseClass
{
   public int book = 6;
   public void base()
   {
       System.out.println("父类的普通方法");
   }
   public void test()
   {
       System.out.println("父类的被覆盖的方法");
   }
}

public class SubClass extends BaseClass {
     
    public String book = "子类中的书";
    
    public void test()
    {
        System.out.println("子类覆盖父类的方法");
    }
    public void sub(){
        System.out.println("子类的普通方法");
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        BaseClass ployBC = new SubClass();
        System.out.println(ployBC.book);
        //***********notice*********
        ployBC.test();
        ployBC.base();
    }

}

这里比较特殊的就是
 BaseClass ployBC = new SubClass();
变量是属于哪一个的父类还是子类,其实可以这么看
BaseClass ployBC 相当于定义了一个变量,之后使用SubClass来为BaseClass开辟空间。由于多态性,子类可以有父类额外的方法,并且继承父类的可见方法。
但是由于变量之前已经确定是父类的类型所以只会拥有父类该有的空间。由于字段是没有多态性而只有方法具有多态性的。
因此在定义这样的变量时候,重写的方法会被调用,字段会保持不变。

在Java中子类开辟的对象可以直接赋值给父类,这种称为向上转型。

向上转型由系统直接完成。

引用类型之间可以进行强制转换。两个类之间要有继承关系才可以进行类型转换。因此在转换的时候可以使用instanceof运算符来判断是否可以转换成功。

5.Runtime类

Runtime可以直接单独启动一个进程来运行操作系统的命令
代码如下
public class ExecTest
{
	public static void main(String[] args) throws Exception
	{
	   Runtime rt = Runtime.getRuntime();
	   rt.exec("可执行文件");
	}
}


使用final关键字修饰的方法无法被重写。但是看下面一个例子

public class PrivateFinalMethodTest
{
	private final void test(){}
}
class Sub extends PrivateFinalMethodTest
{
    public void test(){}
}

编译运行之后是正常的可以运行。很简单,在Java中使用private修饰的方法对子类是不可见的,所以不存在覆盖这一说法。说以可以“重写”

值得注意的是使用final修饰的方法依然可以被重载。

抽象方法和抽象类

抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义成抽象类,抽象类里可以没有抽象方法。

  • 抽象方法必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。
  • 抽象类不能被实例化,无法使用new关键字来调用抽象类的抽象构造器创建抽象类的实例。即使抽象类里不包含抽象方法,这个抽象类也不能创建实例。








你可能感兴趣的:(java,继承,对象)