java基础入门-总结(三)面向对象2

    xiaoxiao2022-07-12  149

    最近一直在追Java写博客,如有问题欢迎添加QQ:1776136546(微信同步)。

    1.类的继承

    关键字:extends

    package st.peter.obj2; public class Animal { String name; public void shout() { System.out.println("动物发出叫声"); } } package st.peter.obj2; public class Dog extends Animal{ public void printName() { System.out.println("name="+name); } } package st.peter.obj2; public class Demo1 { public static void main(String[] args) { Dog dog = new Dog(); dog.name = "哈士奇"; dog.printName(); dog.shout(); } }

    子类在继承父类的时候,会自动拥有父类的所有成员。

    Java中类只支持单继承,不容许多重继承。

    重写

    子类中重写的方法需要和父类被重写的方法具有相同的方法名、参数列表以及返回值类型。

    package st.peter.obj2; public class Animal { String name; public void shout() { System.out.println("动物发出叫声"); } } package st.peter.obj2; public class Dog extends Animal{ //重写父类的方法 public void shout() { System.out.println("汪汪汪......"); } } package st.peter.obj2; public class Demo1 { public static void main(String[] args) { Dog dog = new Dog(); dog.shout(); } }

    super关键字:

    super关键字用来访问父类的成员。访问父类的成员变量,成员方法和构造方法。

    (1):super关键字调用父类的成员变量和成员方法

    package st.peter.obj2; public class Animal { String name = "动物"; public void shout() { System.out.println("动物发出叫声"); } } package st.peter.obj2; public class Dog extends Animal{ String name = "犬类"; //重写父类的方法 public void shout() { super.shout(); //调用父类的成员方法 } public void printName() { System.out.println("name="+super.name); //调用父类的成员变量 } } package st.peter.obj2; public class Demo1 { public static void main(String[] args) { Dog dog = new Dog(); dog.shout(); dog.printName(); } }

     

    (2):使用super关键字调用父类的构造方法

    package st.peter.obj2; public class Animal { public Animal(String name) { System.out.println("name="+name); } } package st.peter.obj2; public class Dog extends Animal{ public Dog() { super("hahah"); } } package st.peter.obj2; public class Demo1 { public static void main(String[] args) { Dog dog = new Dog(); } }

     

    2.final关键字

    final修饰的类不能被继承

    final修饰的方法不能被子类重写

    final修饰的变量是常量,只能赋值一次。

     

    3.抽象类和接口

    (1)抽象类

    Java允许在定义方法时不写方法体,不包含方法体的方法为抽象方法,抽象方法必须使用abstract关键字来修饰。

    当一个类包含了抽象方法,该类必须使用abstract关键字来修饰。

    抽象类不能用来实例化,如果想要调用抽象类中的方法,则需创建一个子类,在子类中将抽象类中的抽象方法进行实现。

    package st.peter.obj2; public abstract class Animal1 { //定义抽象方法 abstract void shout(); } package st.peter.obj2; public class Dog extends Animal1{ @Override void shout() { // TODO Auto-generated method stub System.out.println("汪汪汪。。。。。。"); } } package st.peter.obj2; public class Demo2 { public static void main(String[] args) { Dog dog = new Dog(); dog.shout(); } }

     

    (2)接口

    接口中定义的方法默认使用“public abstract”来修饰。

    接口中的变量默认使用“public static final”来修饰

    需要定义一个类,通过关键字“implements”实现接口中的所有方法。

    package st.peter.obj2; public interface Ani { int ID = 1; void breathe(); void run(); } package st.peter.obj2; public class Dog1 implements Ani { @Override public void breathe() { System.out.println("狗在呼吸!"); } @Override public void run() { System.out.println("狗在跑!"); } } package st.peter.obj2; public class Demo3 { public static void main(String[] args) { Dog1 dog = new Dog1(); dog.run(); dog.breathe(); } }

    接口之间可以继承,可以单继承,也可以双继承。

    4.多态

    在同一个方法中,由于参数类型不同而导致执行效果各异的现象就是多态。

    package st.peter.obj3; public interface Animal { void shout(); } package st.peter.obj3; public class Dog implements Animal{ @Override public void shout() { System.out.println("狗在叫......"); } } package st.peter.obj3; public class Cat implements Animal{ @Override public void shout() { System.out.println("猫在叫......"); } } package st.peter.obj3; public class Test1 { public static void main(String[] args) { Animal a1 = new Cat(); //将Cat对象当做Animal类型来使用 Animal a2 = new Dog(); animalShout(a1); animalShout(a2); } public static void animalShout(Animal ani) { ani.shout(); } }

    对象类型转换-强转

    package st.peter.obj3; public interface Animal { void shout(); } package st.peter.obj3; public class Dog implements Animal{ @Override public void shout() { System.out.println("狗在叫......"); } public void run() { System.out.println("狗在跑!"); } } package st.peter.obj3; public class Test1 { public static void main(String[] args) { Dog dog = new Dog(); animalShout(dog); } public static void animalShout(Animal ani) { Dog dog = (Dog)ani; dog.shout(); dog.run(); // ani.shout(); // ani.run(); } }

    Java提供了一个关键字instanceof,判断一个对象是否为某个类(接口)的实例或者子类实例。

    package st.peter.obj3; public interface Animal { void shout(); } package st.peter.obj3; public class Dog implements Animal{ @Override public void shout() { System.out.println("狗在叫......"); } public void run() { System.out.println("狗在跑!"); } } package st.peter.obj3; public class Cat implements Animal{ @Override public void shout() { System.out.println("猫在叫......"); } } package st.peter.obj3; public class Test1 { public static void main(String[] args) { //Dog dog = new Dog(); //animalShout(dog); Cat cat = new Cat(); animalShout(cat); } public static void animalShout(Animal ani) { if(ani instanceof Cat) { Cat cat = (Cat)ani; cat.shout(); }else { System.out.println("是狗不能强转为猫"); } } }

    Object类

    他是所有类的父类,即每个类都直接或间接继承自该类

    匿名内部类

    匿名内部类的格式:

    new 父类(参数列表)或父接口(){

       //匿名内部类的实现部分

    }

    package st.peter.obj4; public interface Animal { void shout(); } package st.peter.obj4; public class Test1 { public static void main(String[] args) { //定义匿名内部类作为参数传递给方法 animalShout(new Animal() { @Override public void shout() { System.out.println("动物在叫"); } }); } public static void animalShout(Animal ani) { ani.shout(); } }

     

    5.异常

    语法格式如下:

    try{

                        //程序代码块

    }catch(ExceptionType   e){

         //对Exception的处理

    }

    try代码块中编写可能发生异常的Java语句。在try代码块中发生异常语句后面的代码是不会执行的。

    catch代码块中编写针对异常进行处理的代码。

    在程序中,有时候我们希望有些语句无论程序是否发生异常都要执行。加一个finally代码块。

    package st.peter.obj4; public class Test2 { public static void main(String[] args) { //try ... catch ... finally 用于捕获异常 try { int result = divide(4,0); System.out.println(result); }catch(Exception e) { System.out.println("捕获的异常信息为:"+e.getMessage()); return; //结束当前的方法,System.out.println("程序继续向下执行");不会执行 }finally { System.out.println("finally代码块。。。"); } System.out.println("程序继续向下执行"); } public static int divide(int a,int b) { int result = a/b; return result; } }

    throws关键字

    编译时异常与运行时异常

    自定义异常

    6.包

    import语句

    7.访问控制

    访问控制级别

     

     

     

     

     

     

     

     

     

     

     

    最新回复(0)