小编jex*_*345的帖子

Java - 从Interface类型而不是Class声明

在我正确掌握接口最佳实践的过程中,我注意到了以下声明:

List<String> myList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

代替

ArrayList<String> myList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

- 要我的理解,是因为它可以让有一天你不希望实现一个ArrayList但也许另一种类型列表的情况下的灵活性.

有了这个逻辑,我建立了一个例子:

public class InterfaceTest {

    public static void main(String[] args) {

        PetInterface p = new Cat();
        p.talk();

    }

}

interface PetInterface {                

    public void talk();

}

class Dog implements PetInterface {

    @Override
    public void talk() {
        System.out.println("Bark!");
    }

}

class Cat implements PetInterface {

    @Override
    public void talk() {
        System.out.println("Meow!");
    }

    public void batheSelf() {
        System.out.println("Cat bathing");
    }

}
Run Code Online (Sandbox Code Playgroud)

我的问题是,我无法访问batheSelf()方法,因为它仅适用于Cat.这使我相信,我应该只从接口中声明,如果我只打算使用的接口(而不是从子类中额外的方法)声明的方法,否则我应该直接从类(在这种情况下,猫)申报.我在这个假设中是否正确?

java interface

38
推荐指数
3
解决办法
2万
查看次数

MySQL Inner Join表基于列值

假设我有一个表'stats'具有以下结构:
tableName | id | pageViews
tableName列对应于数据库中的单独表.

针对"统计信息"运行查询时,内部联接对tableName列结果的最佳方法是获取每个表的数据?
我想在foreach中运行动态选择然后合并结果.例如:

foreach($tableNames as $tableName) {
    $sql = "SELECT      *
            FROM        stats s
            INNER JOIN  $tableName tbl ON s.id = tbl.id
            WHERE       tableName = '$tableName'";
}
Run Code Online (Sandbox Code Playgroud)

mysql sql

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

interface ×1

java ×1

mysql ×1

sql ×1