黑马程序员——Java基础---接口、继承、多态、高级特性

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、接口、继承、多态

1.类的继承  (java中的关键字都为小写)
Class Test{  //父类
Public Test(){// SomeSentence}   //构造方法
Protected void doSomething(){// SomeSentence}  //成员方法
Protected Test doIt(){     //返回值类型为Test
Return new Test();}
}
class Test2 extends Test{  //继承父类
public Test 2(){  //构造方法
super();   //super()调用父类构造方法(不能调用父类为private的)
super.doSomething();}  //调用父类成员方法
public void doSomethingnew(){// SomeSentence}  //新增方法
public void doSomething(){// SomeSentence}  //重写父类方法(重写方法权限,只能从小到大)
protected Test2 doIt(){  //重写父类方法,返回值类型为Test2
return new Test2();}  //返回值类型必须是父类返回值类型的子类
}
在继承中还有一种特殊的重写方式,子类与父类的成员返回值,方法名称,参数类型及个数都一样,不同的是方法实现内容,成为重构
在java中,当实例化子类对象时,编译器会在子类的构造方法中自动调用父类的无参构造方法,即父类对象也被实例化。(有参构造方法并不被自动调用,依赖于super关键字显示调用父类构造方法)
final()对对像清理时,需要确保子类的final()最后一个动作是调用父类的final(),保证所有被清除
2.Object类(所有的类都直接或间接继承了java.lang.Object类)
Object类主要包括clone(),finalize(),equals(),toString()。另外getClass(),notify(),notifyAll(),wait()不能被重写,原因是被定义为final型。
getClass()是返回对象的类的名称,Class t3=t1.getClass();
toString()讲一个对象返回为字符串形式,实际应用中通常重写toString()方法  getClass().toString()联合
3.对象类型的转型,向上转型,从一个具体的类到较抽象类之间的转换(即子类对象直接调用父类中的方法)
向下转型时相反,如果要将父类对象赋予子类对象,需要强制转化为子类型(Test p=(Test)q;其中q为Test2)
4.instanceof判断对象的类型 格式myobject instanceof ExampleClass(myobject某类的对象引用,ExampleObject 为某个类,结果为boolean型)
方法的重载(同一个类中,允许同时存在一个以上的同名方法,只要这些方法的参数个数或类型不同即可,返回值的不同并不可以),若只有参数个数不同,可使用不定长方法语法,返回值方法名(参数数据类型...参数名)
 多态,使用父类类型的引用指向子类的对象,该引用只能调用父类中定义的方法和变量,如果子类重写了父类中的一个方法,那么调用这个方法时将调用子类中的方法,变量不能被重写,重写只只对于方法
5.抽象类(抽象类不可以实例化对象)
格式 public abstract class Test(){ abstract void Test();//定义抽象类方法}
6.接口(是抽象类的延伸,为了使用draw()而不耽误继承图形类)
格式 public interface drawTest{ void draw();//接口内德方法省略abstract}
一个类实现一个接口的语法,public class a extends b implements drawTest{....//}
7.java中不允许多重继承,但是接口可实现多重继承
格式 class 类名 implements 接口1,接口2,....,接口n
二、类的高级特性
1.包的使用可以有效的管理繁杂的文件,解决类的重名问题(同一个包中的类相互访问不需要制定包名)
定义类的包名 格式 package 包名;(包得命名都必须为小写)
导入类包 import 包名.*;//指定包中的所有类。 import 包名.类名;//指定包中的类。(子类需要单独导)
改变编译后类文件产生的位置,在DOS下, javac -d./bin/./com/wsy/*.java
导入静态成员 import static 静态成员;
2.final变量一旦被设定后就不会改变其值(声明时需要赋值),final static 则在内存中开辟一段固定不变得空间。final方法不能背覆盖,private 则无需再定义一个final。final 类名{} 定义此类不可以继承和改动,此类中的所有方法被隐式的设置为final,但成员变量可以被定义为final和非final
3.内部类
成员内部类,在一个类的内部还有一个类,内部类可以随意使用外部类的成员方法和变量,即使被private修饰
内部类的实例一定要绑定在外部类的实例上,如果从外部类初始化内部类对象,那么内部类就会绑在外部类上.
内部类的成员只能在内部类的范围使用,如果使用内部类对象,则可使用内部类成员。
如果在内部类和非静态方法之外的实例化内部对象,则需要使用 外部类.内部类  的形式指定,例如Outer o=new Outer(); Outer.Inner in=o.new.Inner() ;生成一个内部类对象。内部类可用 static、protected 和 private 修饰;而外部类只能使用 public 和 default;
内部类中访问实例变量:this.属性或直接引用属性。若重名时,在内部类访问外部类的实例变量:外部类名.this.属性。【Outer.this.属性】
4.在内存中所有对象被放置在堆中,方法和方法中的形参或者是局部变量放在栈中
5.局部内部类,在方法中定义的内部类。不能用 public、protected 和 private 进行声明,其范围为定义它的代码块;可以访问局部变量(含参数),但局部变量必须被声明为final
6.匿名内部类,是一种特殊的局部内部类,它是通过匿名类实现接口。
格式,return new A(){...//内部类体};编译后产生外部类名$序号 为名的class文件
7.静态内部类,在内部类不需要访问外部类的非静态成员时,应该使用静态内部类,内部类声明为static。
特点,如果创建静态内部类的对象,不需要其外部类的对象。
8.内部类和其他类一样可以被继承,只是复杂一些,需要设置专门的语法。extends classA.classB
某些类继承内部类时,必须给予这个类一个带参数的构造方法,并且构造方法的参数为需要继承的内部类的外部类引用,同时在构造体中使用a.super()语句。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值