首页 > 其他分享 >2023.5.21学习内容 多态、接口、泛型、反射

2023.5.21学习内容 多态、接口、泛型、反射

时间:2023-05-23 17:22:36浏览次数:46  
标签:21 no void 多态 System 2023.5 println public out

下午
1.了解CSS响应式布局和兼容性问题
2.浏览IDEA使用手册并修改Maven仓库设置
3.复习强化JavaSE的多态、接口、泛型、反射知识

import org.junit.Test;
import test.Hello;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

interface JDBC{
    void connect();
    String excute(String sql);
}

class MYSQL implements JDBC{
    @Override
    public void connect(){
        System.out.println("MySQL连接成功");
    }

    @Override
    public String excute(String sql) {
        System.out.println("MySQL要执行sql");
        return "ok";
    }
}

class Oracal implements JDBC{
    @Override
    public void connect(){
        System.out.println("Orcal连接成功");
    }

    @Override
    public String excute(String sql) {
        System.out.println("Oracal要执行sql");
        return "ok";
    }
}

class GenericTest<T>{  //T表示不确定的某种类型,使用时才被使用
    private T info;

    public void setInfo(T info) {
        this.info = info;
    }

    public T getInfo() {
        //public Objectc getInfo()没有问题,因为Object是所有类型的父类型
        return info;
    }
}

//泛型和继承的关系
class Sub1 extends GenericTest<String>{} //子类在继承泛型父类时把泛型类固化,子类简单,并且也用到了泛型的好处
class Sub2<T> extends GenericTest<T>{} //灵活

public class Review {

    //泛型:解决类型的安全问题
    @Test
    public void test4(){
        GenericTest gt = new GenericTest();
        //类型模糊,类型不安全
        gt.setInfo("300");
        gt.setInfo(400);

        Object info1 =  gt.getInfo();

        GenericTest<Double> gt2 = new GenericTest<Double>();
        gt2.setInfo(3.22);
        Double info2 = gt2.getInfo();

    }

    //多态 子类对象的多种父类形态,父类类型的引用指向多种不同子类对象
    @Test
    public void test1() {
        //ArrayList extends Object , implements List
        ArrayList arrayList = new ArrayList();
        List list = new LinkedList();
    }

    //接口:对不同事物共同行为的抽象,用于描述某种能力或某种规范
    //把子类对象当作一个标准的对象来使用,完成一系列操作而不需要关心子类的细节,简化开发、程序更加灵活方便
    @Test
    public void test2() {
        JDBC jdbc = new MYSQL();//面向接口编程,把子类对象多态为接口类型
        jdbc.connect();
        String s1 = jdbc.excute("select * from test");
        System.out.println("s1 = " + s1);

        jdbc = new Oracal();//面向接口编程,把子类对象多态为接口类型
        jdbc.connect();
        String s2 = jdbc.excute("select * from test");
        System.out.println("s2 = " + s2);
    }

    @Test
    public void test3() {
        //集合中可以保存任意类型对象,
//        List list = new ArrayList(); 加上泛型的类型参数约束集合
//        ①集合被约束为只能处理String类型的对象 不能乱添加其他类型的对象因此安全,
        List<String> list = new ArrayList();
        list.add("abc");
//        list.add(300);
//        list.add(3.22);
//        list.add(false);
//        ②获取元素时不需要多态为Object类型,只需要用本态的String类型,处理元素方便避免造型风险
        String s1 = list.get(0);

        Object o1 = list.get(0);
        System.out.println(o1);
    }

    //反射  每创建一个新对象,在栈中就增加一个该对象的位置,hello1和hello2的两个位置指向内存中的两个no;反射就是, 对象.属性反着来——>属性.对象
    //hello1和hello2为目标对象,no为属性对象
    @Test
    public void test6() throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchFieldException {
        Hello hello1 = new Hello();
        //hello1.no = 300;
        hello1.setNo(300);
        System.out.println(hello1.getNo());
        //System.out.println(hello1.no);

        hello1.test(800);

        Hello hello2 = new Hello();
        //hello2.no = 30000;
        //System.out.println(hello2.no);

        hello2.test(80000);
    //反射
        Class class1 = Class.forName("test.Hello");  //有异常,抛出异常  //类对象
        Class class2 = Hello.class;  //简单、直接、高效、不宜出问题;forName()则更灵活
        System.out.println(class1==class2);  //true 相同的类对象

         Object obj1 = class1.newInstance();
         //obj1.no = 400;
        Field no = class1.getDeclaredField("no");  //getField()方法无法拿到私有属性,只能拿到公共属性
        no.setAccessible(true);//暴力反射:强行对私有属性直接赋值
    //反射比常规操作更暴力
        no.set(obj1,400);  //绑定目标对象和值 相当于obj.1 = 400;
//      System.out.println(obj1.no);
        System.out.println(no.get(obj1));
    }

}
getField()方法无法拿到私有属性,只能拿到公共属性;编译没错运行报错

Hello.java

package test;

public class Hello {
    private int no; //属性一旦私有,就应该用get、set方法处理

    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public void test(int a){
        System.out.println(a);
    }
}

标签:21,no,void,多态,System,2023.5,println,public,out
From: https://www.cnblogs.com/yan999/p/17418804.html

相关文章

  • 分布式事务的21种武器 - 2
    在分布式系统中,事务的处理分布在不同组件、服务中,因此分布式事务的ACID保障面临着一些特殊难点。本系列文章介绍了21种分布式事务设计模式,并分析其实现原理和优缺点,在面对具体分布式事务问题时,可以选择合适的模式进行处理。原文:ExploringSolutionsforDistributedTransactio......
  • poj-2140
    //132K 110MS C++#include<cstring>#include<cstdio>usingnamespacestd;intN;longlongcnt;voidsolve(intN){ intbegin=1; intend=1; longlongsum=1; while(1){ if(begin>N){ break; } //if(begin==......
  • 科技云报道荣膺全球云计算大会“云鼎奖”2020-2021年度优秀团队
    2021年6月16日-18日,第九届全球云计算大会·中国站(CloudConnectChina)在宁波隆重举行。本次大会上,科技云报道荣膺全球云计算大会“云鼎奖”2020-2021年度优秀团队奖项。科技云报道团队代表上台领奖(左一)科技云报道荣膺“云鼎奖”2020-2021年度优秀团队作为每年全球云计算大会·中国......
  • 2023.5.23——软件工程日报
    所花时间(包括上课):6h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习。我了解到的知识点:1.了解了一些数据库的知识;2.了解了一些python的知识;3.了解了一些英语知识;5.了解了一些Javaweb的知识;4.了解了一些数学建模的知识;6.了解了一些计算机网络的知识;......
  • 【2023-05-21】连岳摘抄
    23:59绿槐高柳咽新婵。薰风初入弦。碧纱窗下水沈烟。棋声惊昼眠。微雨过,小荷翻。榴花开欲然。玉盆纤手弄清泉。琼珠碎却圆。                                               ......
  • 2023/5/21每日随笔
    今天,写了概率论作业,进行了数据库语句的的安全性操作,然后对于Android进行完善首先,对于Android内的代码进行带入,可以实现,后来,进行数据格式输出的筛选,目前人工智能给出的答案格式不同,利用正则表达式提取不全,但可以提取,另外,在查找可以语法格式来针chatgpt,以实现结果的规范输出。还......
  • 5.15-5.21
    D.ProductiveMeeting贪心,STLProblem-D-Codeforces题意:​ 一共有n个人,每个人最多可以跟其他人交谈\(s_i\)次,问最多能让所有人交谈多少次。思路:​ 一眼看出贪心,但在怎么贪的问题上出了问题。​ 一开始的想法是排序找到能跟他人交谈次数最多的那个人,优先满足他的所有交......
  • 2023.5.22
    Lucene学习:为第二阶段冲刺 这个是Lucene自动分词建档,有luke查看的,继续学习,那个视频最后是个京东的全文检索。......
  • 文心一言 VS chatgpt (21)-- h264编码一帧数据的流程是怎样的?
    h264编码一帧数据的流程是怎样的?文心一言:H.264编码将一帧数据分成多个块,其中每个块可以单独进行编码。编码的过程包括预测、变换和量化等步骤。具体流程如下:1.帧内预测:对一帧视频进行编码,首先对当前块进行帧内预测。帧内预测使用已经编码的相邻块来预测当前块的值。2.帧间预......
  • 2023.5.22编程一小时打卡
    一、问题描述:线性代数中的矩阵可以表示为一个row*column的二维数组,当row和column均为1时,退化为一个数,当row为1时,为一个行向量,当column为1时,为一个列向量。建立一个整数矩阵类matrix,其私有数据成员如下:introw;intcolumn;int**mat;建立该整数矩阵类matrix构造函数;建立一个*(......