java总结1021

多态:
1)三个前提条件:
a:必须有继承关系
b:方法重写
c:必须有父类引用指向子类对象:向上转型
2)多态中的成员访问特点:
a:成员变量:编译看左,运行看左
b:成员方法(非静态的):编译看左,运行看右
c:静态成员方法:编译看左,运行看左(静态方法不算方法重写,和类有关)
3)多态的弊端
不能使用子类的特有功能:
要使用子类的特有功能:
a):创建子类的具体对象(虽然可以,但是从内存角度考虑,不好:耗费空间)
b):向下转型:将父类的引用强制转换为子类的引用
子类名 对象名= (子类名)父类引用 ;

向下转型会出现的异常:
ClassCastException
ArrayIndexOutOfBoundsException:数组角标越界异常
NullPointerException:空指针异常(解决方案:给对象做非空判断)
if(对象名!=null){
给该对象进行操作..

抽象类:
a:概念
是由于在一个类中存在一个抽象功能,所以必须用abstract去修饰当前的这个类
abstract class Animal{

} 抽象类中不一定有抽象方法,如果一个类中有抽象方法,那么这个类一定是抽象类!
抽象类是不能直接实例化的:不能创建对象
抽象类的子类:具体类
抽象类的实例化:需要通过该抽象类的子类进行数据的初始化!抽象类多态
Animal a = new Cat() ; 抽象类多态形式
b)抽象类的成员特点
成员变量:可以是自定义常量,也可以是变量
成员方法:可以抽象方法(没有方法体的方法),也可以是非抽象方法
构造方法:可以有无参构造/也可以有有参构造
c)abstract不能和哪些关键字共同使用
public或者protected(这两个 是可以使用的)
static
private
final
接口:
创建对象:具体类对象(根据具体需求)
使用抽象类多态(次之)
使用接口多态(最常用的)
接口的表示方法:interface 接口名{}
接口名和类名的命名规则一样
接口的子实现类和接口的关系:implements实现
class 子实现类名implements 接口名{}
接口的子实现类:一定是一个具体类;子实现类是抽象类(没有意义)
接口不能直接实例化—>最终创建接口的对象就是通过子实现类来进行实例化!
接口里面的代码越少越好:
登陆();
注册() ;
接口的子实现类 implements 接口{
登陆(){
//业务逻辑
}
}

测试类
main(){
通过接口多态:
接口名 对象名 =new 子实现类名() ;
接口的成员特点:
成员变量:
变量是一个常量:默认修饰符:public static final
成员方法:默认修饰符:public abstract
接口中是不能有构造方法的;
形式参数和返回值问题
形式参数
基本类型:只是把值赋值给形式参数
引用类型:具体类类:如果形式参数是一个具体类,那么需要创建该类对象

package org.westos_形参和返回值;
/*
 *  形参的返回值是一个具体类的时候
 * */
class People{
    public void method(Student s) {
        s.show();
    }
}
class Student{
    public void show() {
        System.out.println("学生show");
    }
}
public class Practice01 {
    public static void main(String[] args) {
        People p = new People();

        p.method(new Student());
    }

}

抽象类:如果形式参数是抽象类的情况,那么需要自定义一个抽象类的子类,来进行实例化(创建对象)!,创建对象的实质:抽象类多态!

package org.westos_形参和返回值;
/*
 * 抽象类:如果形式参数是抽象类的情况,那么需要自定义一个抽象类的子类,来进行实例化(创建对象)!,创建对象的实质:抽象类多态!
 * */
class Demo{
    public void method(People2 p) {
        p.show();
    }
}
abstract class People2{
    public abstract void show();
}
class Student2 extends People2{
    public void show() {
        System.out.println("学生show");
    }
}
public class P02 {
    public static void main(String[] args) {
        Demo d = new Demo();
        People2 p = new Student2();
        d.method(p);
    }
}

接口:如果形式参数是接口情况,那么需要自定义一个接口的子实现类,然后通过接口多态的形式给接口进行实例化!(接口多态!)

返回值类型
基本类型 :返回一个具体的值
引用类型:具体类:直接返回该类对象(通常实际开发中使用的是匿名对象)
抽象类:返回值如果是抽象类,需要的返回是该抽象类的子类对象

package org.westos_形参和返回值;
/*
 *返回值如果是抽象类,需要的返回是该抽象类的子类对象  
 * */
class Demo{
    public People2 method() {
        return new Student2();
    }
}
abstract class People2{
    public abstract void show();
}
class Student2 extends People2{
    public void show() {
        System.out.println("学生show666");
    }
}
public class P02 {
    public static void main(String[] args) {
        new Demo().method().show();
    }
}

接口:返回值如果是接口类型,需要的是返回该接口的子实现类对象(通过子实现类进行实例化!)

3:内部类的概述及访问特点
内部类: 在一个类中定义另一个类
访问特点: 内部类可以访问外部类的所有成员
外部类想访问内部类的成员时必须先创建内部类的对象

4:内部类的分类:
成员内部类: 在外部类的成员位置

package org.westos_内部类;
/**
 * 
 * 看程序
 * 面试题:
        要求请填空分别输出30,20,10。

        外部类和内部类没有继承关系!
 * */
class Outer7 {
    public int num = 10;

    class Inner7 {
        public int num = 20;
        public void show() {
            int num = 30;
            System.out.println(num);
            System.out.println(this.num);
            System.out.println(new Outer7().num);//要访问外部类的成员变量:匿名对象 :new 外部类名().成员变量
            //外部类的this限定
            System.out.println(Outer7.this.num);

        }
    }
}
public class InnerClassTest {
    public static void main(String[] args) {
        Outer7.Inner7 oi = new Outer7().new Inner7();
        oi.show();
    }
}

局部内部类:在外部了的局部位置定义的这个类

匿名内部类

package org.westos_内部类;
/**
 * 匿名内部类在开发中的使用
 * */
interface Inter3{
    public abstract void study() ;
}

class StudentDemo{
    public void method(Inter3 i){//形式参数是一个接口
        i.study() ;
    }
}

//方式1:
class Armay implements Inter3{
    public void study(){
        System.out.println("好好学习,天天向上...");
    }
}

//方式2:

//测试类
public class OuterTest {
    public static void main(String[] args) {
        //需求:调用StudentDemo中的method()方法
        StudentDemo sd = new StudentDemo() ;

        Inter3 i = new Armay() ;
        i.study() ;

        System.out.println("---------------------");

        //方式2:匿名内部类
        StudentDemo sd2 = new StudentDemo() ;
        sd2.method(new Inter3(){

            @Override
            public void study() {
                System.out.println("好好学习,天天向上...");
            }

        }) ;

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值